如何自动单击仅在手动单击时有效的按钮?

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&currentRole=1&currentTab=16&currentModule=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 文件,使其正常工作。