循环浏览csv中的多个列和行以填写表单

2024-04-20 05:07:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在尝试模仿前面发布的示例,但还是被卡住了

我有一个简单的网页表单:姓氏、姓名、电子邮件、密码、确认密码

还有一个.csv,其中包含与表单对应的4列

Last name         Name             Email   Password
0    Brown        Stan     brown@stan.com   12345678
1    White        Eagle   white@eagle.com  123456789
2    Dante        Aligr     adant@mail.au   98765432 

因此,我只想将这3个条目输入表单,并在每个条目后单击“发送”

我从这里复制了一个代码,看起来好像是通过了,但我一直得到这个


  File "C:\Users\untitled2.py", line 43, in <module>
    last.send_keys(lname)

AttributeError: 'list' object has no attribute 'send_keys' 

我试过的代码

from selenium import webdriver
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary

options = Options()
options.binary_location = FirefoxBinary(r"C:\Program Files\Mozilla Firefox\firefox.exe")

driver = webdriver.Firefox(executable_path=r'C:\WebDriver\bin\geckodriver.exe', firefox_options=options)

import time
import pandas as pd

reg = pd.read_csv('Form.csv', header=0, delimiter=';', sep=r'\s*;\s*')

print(reg)

lname = reg['Last name'].tolist()
name = reg['Name'].tolist()
mail = reg['Email'].tolist()
password = reg['Password'].tolist()
password_c = reg['Password'].tolist()


driver.get('url')

first = driver.find_elements_by_xpath("/html/body/div/div[3]/form/div[2]/div/div[2]/div[2]/div/div/div[2]/div/div[1]/div/div[1]/input")
last = driver.find_elements_by_xpath("/html/body/div/div[3]/form/div[2]/div/div[2]/div[1]/div/div/div[2]/div/div[1]/div/div[1]/input")
mail =  driver.find_elements_by_xpath("/html/body/div/div[3]/form/div[2]/div/div[2]/div[3]/div/div/div[2]/div/div[1]/div/div[1]/input")
password =  driver.find_elements_by_xpath("/html/body/div/div[3]/form/div[2]/div/div[2]/div[4]/div/div/div[2]/div/div[1]/div/div[1]/input")
password_confirm = driver.find_elements_by_xpath("/html/body/div/div[3]/form/div[2]/div/div[2]/div[4]/div/div/div[2]/div/div[1]/div/div[1]/input")

submit = driver.find_elements_by_xpath('/html/body/div/div[3]/form/div[2]/div/div[3]/div[1]/div/div/span/span')

for lname, name, mail, password, password_c in zip(lname, name, mail, password, password_c):
    
    last.send_keys(lname)
    time.sleep(1)
    
    first.send_keys(name)
    time.sleep(1)
    
    mail.send_keys(mail)
    time.sleep(1)
    
    password.send_keys(password)
    time.sleep(1)
    
    password_confirm.send_keys(password_c)
    time.sleep(1)
    
    submit.click()
    time.sleep(3)

任何朝着正确方向的推进都将受到高度赞赏,因为我已经看到了大量使用带有send_key()的列表的示例

谢谢


2条回答

错误消息表明您正在将send_keys()与普通python list一起使用

根据Selenium docsfind_elements_by_xpath确实返回了一个列表

有可能您打算使用find_element_by_xpath(没有's'after元素)

不管怎样

执行部分应该是这样的

for lnames in lname:
    count = 0

for names in name:
    count_name = 0

for mails in mail_:
    count_mail = 0

for value in last:
    value.send_keys(lname[count])
    count +=1 
   
for x in mail:
    x.send_keys(mail_[count_mail])
    count_mail +=1 
    
for y in first:
    y.send_keys(name[count_name])
    count_name +=1
                                                                                                                                                                                         
submit = driver.find_element_by_xpath('//*[@id="mG61Hd"]/div[2]/div/div[3]/div[1]/div/div/span/span')
submit.click()

相关问题 更多 >