Невозможно загрузить файл, используя селен с python: ElementNotInteractableException. Элемент недоступен с клавиатуры - PullRequest
0 голосов
/ 16 марта 2020

Я прочитал все доступные ответы на stackoverflow, связанные с моим запросом, но ни один из ответов не является решением моей проблемы. Я пытаюсь загрузить документ с рабочего стола, используя сценарий python, но между сценарием и Exception произошел сбой. Скрипты выдают исключение в следующем python коде

frame1 = driver.find_element_by_id("BrowseButton")
driver.switch_to.frame(frame1)
document_to_attach = wait.until(EC.element_to_be_clickable((By.XPATH, "//object[@class='swfupload']")))


document_to_attach.send_keys(r"C:\Users\Desktop\sample.msg")

Исключение составляет

selenium.common.exceptions.ElementNotInteractableException: Message: Element <object id="SWFUpload_0" class="swfupload" type="application/x-shockwave-flash"> is not reachable by keyboard

HTML Код, соответствующий этому элементу:

    <iframe style="position: relative; top: 5px;" border="0" src="DocumentUploadForm.jsp?DocID=21UZZZQ5UGKEZN5OBTZQ51JZR1BJD3ZZ&amp;maxNumFiles=3&amp;Time=1584360999619&quot;" name="BrowseButton" id="BrowseButton" scrolling="no" width="100" height="32" frameborder="0">
    </iframe>

    <object id="SWFUpload_0" type="application/x-shockwave-flash" data="swfupload/swfupload.swf" class="swfupload" style="" width="20" height="20">
<param name="wmode" value="transparent">
<param name="movie" value="swfupload/swfupload.swf">
<param name="quality" value="high">
<param name="menu" value="false">
<param name="allowScriptAccess" value="always">
<param name="flashvars" value="movieName=SWFUpload_0&amp;uploadURL=%2Fhome%2Fgold%2Fjsp%2FDocumentUploadReceiver.jsp%3FTWCSESSIONID%3Drmgw946kr5mi46v8srwuewbs&amp;useQueryString=false&amp;requeueOnError=false&amp;httpSuccess=&amp;assumeSuccessTimeout=0&amp;params=&amp;filePostName=Filedata&amp;fileTypes=*.*&amp;fileTypesDescription=All%20Files&amp;fileSizeLimit=64%20MB&amp;fileUploadLimit=3&amp;fileQueueLimit=3&amp;debugEnabled=false&amp;buttonImageURL=%2Fhome%2Fgold%2Fjsp%2F&amp;buttonWidth=20&amp;buttonHeight=20&amp;buttonText=&amp;buttonTextTopPadding=0&amp;buttonTextLeftPadding=0&amp;buttonTextStyle=color%3A%20%23000000%3B%20font-size%3A%2016pt%3B&amp;buttonAction=-110&amp;buttonDisabled=false&amp;buttonCursor=-2"></object>

Это image I want to send the path of this file on in the image after document to attach

Вручную, если я открываю веб-сайт и загружаю документ, он успешно просматривает документ с рабочего стола и загружает его. Когда я использую сценарий селена с Firefox веб-браузером, он дает вышеуказанное исключение. При запуске скрипта автоматизации, если я пытаюсь вручную щелкнуть этот элемент, я также не могу щелкнуть его, и он отображается в браузере как изображение.

Я думаю, что это может быть связано с Fla * 1024. * объект или некоторые плагины или что-то еще. В чем причина этого исключения и как его устранить

Ответы [ 2 ]

0 голосов
/ 17 марта 2020

Причиной исключения является fla sh, используемый веб-сайтом. Поэтому добавлена ​​следующая строка кода:

firefoxProfile = webdriver.FirefoxProfile()
firefoxProfile.set_preference("plugin.state.flash", 2)
driver = webdriver.Firefox(firefoxProfile, executable_path=r'drivers\geckodriver.exe')

Также после этого сценарий автоматизации не давал пути с использованием send_keys и, следовательно, найдено решение использовать библиотеку pyautogui или библиотеку autoit. Для этой цели используется следующий код:

frame1 = driver.find_element_by_id("BrowseButton")
driver.switch_to.frame(frame1)
document_to_attach = wait.until(EC.element_to_be_clickable((By.XPATH, "//object[@class='swfupload']")))
document_to_attach.click()
import time
time.sleep(5)
import autoit
autoit.control_focus("Open", "")
autoit.control_set_text("Open", "Edit1", r"C:\Users\Desktop\sample.msg")
autoit.control_click("Open", "Button1")

Вам необходимо установить модуль autoit на случай, если у вас его нет по pip install autoit

0 голосов
/ 16 марта 2020

Используйте presence_of_element_located. Элемент, на который вы отправляете текст, может быть недоступен для клика.

Если это не сработает, попробуйте закомментированный, например, содержащий WebDriverWait(driver, 10)

from selenium.webdriver.support.ui import WebDriverWait

frame1 = driver.find_element_by_id("BrowseButton")
driver.switch_to.frame(frame1)
document_to_attach = wait.until(EC.presence_of_element_located((By.XPATH, "//object[@class='swfupload']")))
#document_to_attach = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//object[@class='swfupload']")))


document_to_attach.send_keys(r"C:\Users\Desktop\sample.msg")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...