Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法使用selenium和python:ElementNotInteractiableException上载文件。键盘无法访问元素_Python_Selenium_Firefox - Fatal编程技术网

无法使用selenium和python:ElementNotInteractiableException上载文件。键盘无法访问元素

无法使用selenium和python:ElementNotInteractiableException上载文件。键盘无法访问元素,python,selenium,firefox,Python,Selenium,Firefox,我已经阅读了stackoverflow上与我的问题相关的所有可用答案,但没有任何答案可以解决我的问题。我正试图使用python脚本从桌面上传一个文档,但脚本在两者之间失败,出现了异常。脚本在下面的python代码中引发异常 frame1 = driver.find_element_by_id("BrowseButton") driver.switch_to.frame(frame1) document_to_attach = wait.until(EC.element_to_be_clickab

我已经阅读了stackoverflow上与我的问题相关的所有可用答案,但没有任何答案可以解决我的问题。我正试图使用python脚本从桌面上传一个文档,但脚本在两者之间失败,出现了异常。脚本在下面的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
selenium.common.exceptions.elementnotinteractiableexception:消息:键盘无法访问元素
与此元素对应的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>

使用
元素的存在
。您要向其发送文本的元素可能无法单击

如果不起作用,请尝试注释掉包含
WebDriverWait(driver,10)


异常背后的原因是网站使用的flash-

firefoxProfile = webdriver.FirefoxProfile()
firefoxProfile.set_preference("plugin.state.flash", 2)
driver = webdriver.Firefox(firefoxProfile, executable_path=r'drivers\geckodriver.exe')
此外,自动化脚本没有使用send_键给出路径,因此找到了使用
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安装autoit

安装autoit模块。我已经使用了元件,但它不工作。我已经尝试了尽可能多的解决方案,我认为这与该网站使用的flash有关。我也尝试了WebdriverWait,但这不起作用。如何实现它的功能,flash对象内部看不到元素,因为它不是HTML。当您手动输入一个文件并将其上载,然后使用所需的文件名欺骗该流量时,您可能会看到生成的流量。您是否可以查看HTML并使用
value=“file”
搜索标记
input
,是否有?
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")