Как я могу автоматизировать нажатие кнопки, которая работает только при нажатии вручную? - PullRequest
0 голосов
/ 27 марта 2020

Мне нужно автоматизировать загрузку файла на сайт. Я использую 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&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() 

Я могу запустить весь код непосредственно перед последним нажатием кнопки, и он ДОЛЖЕН загрузить файл, если я затем нажму кнопку вручную. Выдает ошибку, когда я пытаюсь автоматизировать последнее нажатие кнопки. Таким образом, кнопка нажимается, но веб-сайт не распознает файл. Текст ошибки, указанный на веб-сайте: «Не удается найти файл sct_upload_file.csv или файл пуст.»

Я пытался перейти на pyauto gui прямо перед нажатием последней кнопки, чтобы нажать на изображение кнопки , При этом также нажимается кнопка, но она выдает ту же ошибку, что и нажатие кнопки с помощью Selenium, даже при использовании естественных движений мыши через pyauto gui для медленного перемещения мыши над кнопкой и затем щелчка по ней.

HTML с сайта

Я также пытался использовать ActionChains для нажатия кнопки. Я снова могу щелкнуть по нему, но получаю ту же ошибку.

Я попытался просто выбрать элемент и использовать «upload.send_keys (Keys.RETURN)» в следующей строке. Он нажимает кнопку, но я получаю ту же ошибку.

Я также пытался переместить фокус на кнопку, отправив клавиши TAB и с помощью switch_to, а затем отправив клавишу RETURN, но я не был возможность получить фокус, чтобы фактически перейти к кнопке.

При нажатии последней кнопки веб-страница изменится на тип сообщения «подождите, пока файл загружен».

Данные обрабатываются, снимок экрана

Затем страница снова изменяется для отображения сообщения об ошибке.

Скриншот сообщения об ошибке

URL-адрес делает не изменить. Это "https://client.schwabct.com/uploadData.action" для каждой страницы.

1 Ответ

0 голосов
/ 20 апреля 2020

Я сам разобрался с ответом. Код в вопросе был на самом деле с отступом под оператором «with», открывающим загружаемый файл csv. Перемещение кода из оператора «with», закрытие файла csv позволило ему работать без ошибок.

...