我正在尝试构建一个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时,这将导致驱动程序处于错误状态,从而导致驱动程序失败。

10-04 22:17
查看更多