无法使用selenium和python:ElementNotInteractiableException上载文件。键盘无法访问元素
我已经阅读了stackoverflow上与我的问题相关的所有可用答案,但没有任何答案可以解决我的问题。我正试图使用python脚本从桌面上传一个文档,但脚本在两者之间失败,出现了异常。脚本在下面的python代码中引发异常无法使用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
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&maxNumFiles=3&Time=1584360999619"" 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&uploadURL=%2Fhome%2Fgold%2Fjsp%2FDocumentUploadReceiver.jsp%3FTWCSESSIONID%3Drmgw946kr5mi46v8srwuewbs&useQueryString=false&requeueOnError=false&httpSuccess=&assumeSuccessTimeout=0&params=&filePostName=Filedata&fileTypes=*.*&fileTypesDescription=All%20Files&fileSizeLimit=64%20MB&fileUploadLimit=3&fileQueueLimit=3&debugEnabled=false&buttonImageURL=%2Fhome%2Fgold%2Fjsp%2F&buttonWidth=20&buttonHeight=20&buttonText=&buttonTextTopPadding=0&buttonTextLeftPadding=0&buttonTextStyle=color%3A%20%23000000%3B%20font-size%3A%2016pt%3B&buttonAction=-110&buttonDisabled=false&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")