【发布时间】:2018-08-24 03:59:34
【问题描述】:
我正在尝试使用 selenium 自动执行一项任务。我的代码将分解为我定义的函数。
我首先阅读了一张 Excel 表格并将该数据作为字符串存储在字典中。
def get_excel():
d = defaultdict(list)
workbook = openpyxl.load_workbook(sys.argv[1])
sheet = workbook.get_sheet_by_name('Sheet1')
row_count = sheet.max_row
for r in range(2, row_count + 1):
d[str(sheet.cell(r, 4).value)].append((str(sheet.cell(r, 1).value), str(sheet.cell(r, 2).value), str(sheet.cell(r, 3).value)))
return d
现在我有一个单独的函数可以从 excel 中获取数据:
def get_emp_data(FirstName, LastName, Email1, EmployeeID, driver):
f_name = driver.find_element_by_name('f_name')
l_name = driver.find_element_by_name('l_name')
email = driver.find_element_by_name('contact_id.email')
employeeID = driver.find_element_by_name('contact_id.custom')
time.sleep(5)
#writing in the fields
f_name.send_keys(FirstName)
l_name.send_keys(LastName)
email.send_keys(Email1)
employeeID.send_keys(EmployeeID)
#clicking save button
save = driver.find_element_by_id('saveButton').click()
driver.get('link to web address')
接下来我有一个自动化的功能。它从 excel 表中传入数据。
def log_in():
chrome_path = ("C:\\chromedriver.exe")
driver = webdriver.Chrome(chrome_path)
driver.get("link to web address")
#setting variables for username and password fields
username = driver.find_element_by_name('login')
password = driver.find_element_by_name('password')
#input email and password
username.send_keys("my email")
password.send_keys("my password")
#click submit
driver.find_element_by_id('submitButton').click()
#click New Customer Button
time.sleep(5)
driver.find_element_by_id('newCustomerButton').click()
return driver
最后,我把所有东西都放到了一个 main 函数中:
def main():
excel_data = get_excel()
driver = log_in()
time.sleep(2)
for EmployeeID in excel_data:
try:
get_emp_data(excel_data[EmployeeID][0], excel_data[EmployeeID][1], excel_data[EmployeeID][2], EmployeeID, driver)
continue
except:
print(FirstName)
然后我调用 main()
main()
除了从 excel 中写入值之外,代码正在做它应该做的一切。应该log_in(),使用excel的第一行数据,点击保存,进入下一个编辑页面,使用excel的下一行数据,再次保存,直到excel没有数据为止。我认为我将数据传递给我的函数的方式有问题。任何帮助表示赞赏
【问题讨论】:
-
有什么错误吗?
-
不,我不擅长编程,也不确定错误处理和打印错误。我所知道的是,除了发送文本之外,自动化适用于所有事情,这让我相信这是我的字典传递给我的函数的方式。
-
您可以通过打印您的名字和姓氏来检查。
-
快速指向可能出错的地方,您正在执行
for EmployeeID in excel_data,但随后不在代码中的任何位置使用EmployeeID。每次运行log_in时,您都传递了完全相同的 4 个值。我认为您可能需要将插入逻辑与获取驱动程序分开(或弄清楚如何将其放入循环中)。 -
我用新代码编辑了代码和问题,并将写出的内容分离到一个新函数中。我还在 for 循环中使用了 EmployeeID。仍然无法正常工作,并且没有打印出 FirstName。
标签: python selenium dictionary selenium-webdriver