我正在尝试构建一个Python脚本,该脚本读取Excel文件并将数据存储在字典中。我已经构建了所有内容,但是当运行脚本时,网页会打开到正确的页面,并且不会继续前进。当我逐行运行时,找到了我所有的元素,并将代码写入了字段。
我的excel列是:名字,姓氏,电子邮件1,员工ID
我写的python脚本是:
#Importing necessary tools
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from collections import defaultdict
import openpyxl
import time
import os
import sys
#loading the data from the excel
def read_excel():
d = defaultdict(list)
workbook = openpyxl.load_workbook("path of the excel file")
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
#Load all employees information from excel sheet
def load_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')
#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()
def mark_iteration():
file = open('iterations.txt', 'r+')
num = file.read()
file.seek(0)
file.write(str(int(num) + 1))
file.truncate()
file.close()
def mark_failed(EmployeeID):
file = open('failed.txt', 'a')
file.write(EmployeeID + '\n')
file.close()
#sign into Lightspeed Customer Page
def sign_in():
#get to the Lightspeed customer page
chrome_path = ('C:\\chromedriver.exe')
driver = webdriver.Chrome(chrome_path)
driver.get("link to my webpage")
#input email and password
username = driver.find_element_by_name('login')
password = driver.find_element_by_name('password')
username.send_keys("login")
password.send_keys("password")
#click submit
driver.find_element_by_id('submitButton').click()
#click New Customer Button
driver.find_element_by_id('newCustomerButton').click()
return driver
def main():
excel_data = read_excel()
driver = sign_in()
time.sleep(10)
for EmployeeID in excel_data:
try:
load_emp_data(EmployeeID, excel_data[EmployeeID][0], driver)
mark_iteration()
except:
mark_failed(EmployeeID)
continue
main()
当我运行此模块时,网页将打开,并且不会在其中移动。我的failed.txt文件显示了Employee ID的5个结果,这意味着它在任何情况下均未成功。关于为什么此脚本无法从头到尾完成的任何想法?
我添加了堆栈跟踪并解决了超出范围错误的列表索引。现在,这就是powershell给我的。它给了我这4个生成器对象,然后关闭了网页,就好像完成了一样。
<generator object main.<locals>.<genexpr> at 0x04C78530>
<generator object main.<locals>.<genexpr> at 0x04C78530>
<generator object main.<locals>.<genexpr> at 0x04C78530>
<generator object main.<locals>.<genexpr> at 0x04C78530>
我正在从字典中打印出正确的信息:
defaultdict(<class 'list'>, {'Xxxxxx': [('John', 'Doe', 'john.doe@email.com')]
为什么脚本不接收这些信息并写入浏览器,我不知道。
最佳答案
您的代码的缩进似乎被搞砸了,我建议您修复它,因为缩进在python中很重要。
但是,在实际输入登录名和密码信息之前,您似乎从driver
返回sign_in
。当您尝试调用load_emp_data
时,这将导致驱动程序处于错误状态,从而导致驱动程序失败。