【发布时间】:2020-03-27 11:19:07
【问题描述】:
我需要自动将文件上传到网站。我正在使用 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。这也会单击按钮,但它会产生与使用 Selenium 单击按钮相同的错误,即使通过 pyautogui 使用自然鼠标移动将鼠标缓慢移动到按钮上然后单击它也是如此。
我也尝试过使用 ActionChains 来点击按钮。同样,我可以单击它,但我得到了同样的错误。
我尝试只选择元素并在下一行使用“upload.send_keys(Keys.RETURN)”。它点击按钮,但我得到同样的错误。
我还尝试通过发送 TAB 键和使用 switch_to,然后发送 RETURN 键将焦点移动到按钮,但我无法将焦点实际移动到按钮。
当最后一个按钮被点击时,网页会变成“等待文件上传”消息。
Data is being processed screenshot
然后页面再次更改以显示错误消息。
网址不会改变。每个页面都是“https://client.schwabct.com/uploadData.action”。
【问题讨论】:
-
返回的错误是什么?
-
请edit您的问题包括HTML代码而不是屏幕截图。
-
谢谢,格雷格。您需要查看多少代码?在屏幕截图中发布所有内容的扩展版本会很长。
-
根据报错是文件路径错误或者csv文件为空。如果没有成功点击上传按钮,则不会出现错误。
-
谢谢,乔尔特加。 csv 文件肯定有数据,并且文件路径必须正确,因为当我将代码运行到最后一行之前的位置,然后用我的手指在鼠标上单击按钮时,它可以正常工作。当我手动单击时,我会看到与自动单击相同的“正在处理数据”屏幕。我只是无法通过自动点击识别文件或文件路径。
标签: python selenium file-upload automation pyautogui