我需要自动将文件上传到网站。我正在使用Selenium,并且可以浏览网站并从计算机上的驱动器中选择所需的文件输入。唯一无效的是单击“上传”按钮。
driver = webdriver.Chrome(executable_path=r'P:/_Public/ScheduledTasks/SeleniumDriver/chromedriver.exe')
driver.get("https://client.schwabct.com?sId=MTUyMTM")
username = driver.find_element_by_name("userName")
username.clear()
username.send_keys(<userid>)
password = driver.find_element_by_name("password")
password.clear()
password.send_keys(<pw>)
driver.find_element_by_name("submitButton").click()
driver.get("https://client.schwabct.com/uploadData.action?currentApplication=87¤tRole=1¤tTab=16¤tModule=262&reset=Y")
driver.find_element_by_name("submitButton").click()
time.sleep(1)
upload_options = Select(driver.find_element_by_id("slctValue"))
upload_options.select_by_value("SECURITY_CHECKLIST")
fileinput = driver.find_element_by_id('uploadData_uploadDataInfo_fileUpload')
fileinput.send_keys(r"P:\_Public\Tamarac\Extracts\Upload_to_SCT\sct_upload_file.csv")
d = driver.find_element_by_id("isIgnoreHeaderId").click()
upload = driver.find_element_by_id("uploadButton").click()
我可以在单击最后一个按钮之前运行所有代码,如果我随后手动单击按钮,它将上传文件。当我尝试自动执行最终按钮单击时,它给出了一个错误。因此,该按钮被单击,但是网站无法识别该文件。网站给出的错误文本是“找不到文件sct_upload_file.csv或文件为空。”
我已经尝试在最终按钮单击之前立即切换到pyautogui以单击按钮的图像。这也会单击按钮,但是即使通过pyautogui通过自然的鼠标移动将鼠标缓慢移到按钮上然后单击它,也会产生与使用Selenium单击按钮相同的错误。
我也尝试过使用ActionChains单击按钮。同样,我可以单击它,但是出现相同的错误。
我已经尝试过选择元素并在下一行中使用“ upload.send_keys(Keys.RETURN)”。它单击按钮,但出现相同的错误。
我还尝试过通过发送TAB键和使用switch_to,然后发送一个RETURN键,将焦点移至该按钮,但是我无法真正将焦点移至该按钮。
单击最后一个按钮时,网页将变为“文件上传时等待”消息的类型。
Data is being processed screenshot
然后页面再次更改以显示错误消息。
URL不变。每页为“ https://client.schwabct.com/uploadData.action”。
我自己找出答案。问题中的代码实际上是在“ with”语句下缩进的,该语句打开了要上传的csv文件。将代码移出“ with”语句,关闭csv文件,使其可以正常工作。