如何自动单击仅在手动单击时有效的按钮?
How Can I automate clicking a button that only works when manually clicked?
我需要自动将文件上传到网站。我使用的是 Selenium,我可以浏览网站并 select 从我的计算机上的驱动器输入我想要的文件。唯一不起作用的部分是单击“上传”按钮。
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()
我可以 运行 在最终按钮单击之前的所有代码,如果我随后手动单击该按钮,它确实会上传文件。当我尝试自动单击最终按钮时出现错误。所以按钮被点击了,但网站无法识别该文件。网站给出的错误文本是"Cannot find file sct_upload_file.csv or file is empty."
我试过在最后一个按钮点击之前切换到 pyautogui 以点击按钮的图像。这也会单击按钮,但它会产生与使用 Selenium 单击按钮相同的错误,即使通过 pyautogui 使用自然鼠标移动将鼠标缓慢移动到按钮上然后单击它也是如此。
HTML from the site
我也尝试过使用 ActionChains 来点击按钮。同样,我可以点击它,但我得到了同样的错误。
我试过 select 元素并在后续行中使用 "upload.send_keys(Keys.RETURN)"。它点击了按钮,但我得到了同样的错误。
我也试过将焦点移动到按钮上,方法是发送 TAB 键并使用 switch_to,然后发送 RETURN 键,但我无法获得焦点实际移动到按钮。
单击最后一个按钮后,网页将变为 "wait while the file is uploaded" 消息类型。
Data is being processed screenshot
页面随后再次更改以显示错误消息。
Error message screenshot
URL不变。每页是“https://client.schwabct.com/uploadData.action”。
我自己想出了答案。问题中的代码实际上是在打开正在上传的 csv 文件的 "with" 语句下缩进的。将代码移出 "with" 语句,关闭 csv 文件,使其正常工作。
我需要自动将文件上传到网站。我使用的是 Selenium,我可以浏览网站并 select 从我的计算机上的驱动器输入我想要的文件。唯一不起作用的部分是单击“上传”按钮。
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()
我可以 运行 在最终按钮单击之前的所有代码,如果我随后手动单击该按钮,它确实会上传文件。当我尝试自动单击最终按钮时出现错误。所以按钮被点击了,但网站无法识别该文件。网站给出的错误文本是"Cannot find file sct_upload_file.csv or file is empty."
我试过在最后一个按钮点击之前切换到 pyautogui 以点击按钮的图像。这也会单击按钮,但它会产生与使用 Selenium 单击按钮相同的错误,即使通过 pyautogui 使用自然鼠标移动将鼠标缓慢移动到按钮上然后单击它也是如此。
HTML from the site
我也尝试过使用 ActionChains 来点击按钮。同样,我可以点击它,但我得到了同样的错误。
我试过 select 元素并在后续行中使用 "upload.send_keys(Keys.RETURN)"。它点击了按钮,但我得到了同样的错误。
我也试过将焦点移动到按钮上,方法是发送 TAB 键并使用 switch_to,然后发送 RETURN 键,但我无法获得焦点实际移动到按钮。
单击最后一个按钮后,网页将变为 "wait while the file is uploaded" 消息类型。
Data is being processed screenshot
页面随后再次更改以显示错误消息。
Error message screenshot
URL不变。每页是“https://client.schwabct.com/uploadData.action”。
我自己想出了答案。问题中的代码实际上是在打开正在上传的 csv 文件的 "with" 语句下缩进的。将代码移出 "with" 语句,关闭 csv 文件,使其正常工作。