我正在尝试使用selenium和python自动填充表单。除了通过单击“添加照片”按钮上传图像外,一切似乎都有效。这是按钮的html片段:
<div style="position: relative; overflow: hidden; display: inline-block;" class="image-uploader-button-wrap">
<input style="left: -1000px; top: 0px; position: absolute;" name="Filedata" accept="image/*" multiple="multiple" id="imageUploader_1" type="file">
<input class="olx-upload-button" value="Add photos" type="button">
</div>
我尝试了两种不同的方法(我没有工作:(): 1)
elem = driver.find_element_by_id("imageUploader_1")
elem.send_keys("/Users/ue/Desktop/703.png")
但这给了我以下错误:
selenium.common.exceptions.ElementNotVisibleException: Message: u'Element is not currently visible and so may not be interacted with' ;
2)第二种方法:
elem = driver.find_element_by_class_name("olx-upload-button").click()
这将打开一个Windows弹出窗口,我找不到从本地目录(桌面)中选择图像的方法,并在“窗口”弹出窗口中选择“打开”。 在弹出窗口之后,我试着这样做:
driver.find_element_by_id("imageUploader_1").send_keys("/Users/ue/Desktop/703.png")
但什么都没发生。我几乎看过每一篇关于SO的文章,我很确定我距离修复还有一步之遥。任何想法/建议/提示都会有所帮助。
答案 0 :(得分:0)
尝试删除overflow: hidden
和/或使用JavascriptExecutor
。
Selenium根据以下条件(https://code.google.com/p/selenium/source/browse/javascript/atoms/dom.js)决定是否显示元素:
- 如果显示封闭选择,则显示选项或optgroup(忽略选择的不透明度)。
- 如果显示使用它的图像,则显示图像映射元素,并且元素的区域为正。
- 未显示任何隐藏的输入。
- 未显示任何NOSCRIPT元素。
- 不显示任何隐藏可见性的元素。
- 显示样式等于'none'或具有祖先
的任何元素 显示样式等于'none'的- 不显示。
- 未显示任何透明元素。
- 未显示任何没有正尺寸的元素。
- 垂直或水平SVG路径元素将报告零宽度或高度,但如果它具有正行程宽度则“显示”。
- 如果零大小的元素具有正元素的子元素或文本节点,则仍应将其视为具有正大小,除非 该元素具有'溢出'样式的'隐藏'。
- 未显示溢出隐藏的元素。
答案 1 :(得分:0)
你找到答案了吗?在点击之前你必须取消隐藏。
elem = driver.find_element_by_id('imageUploader_1')
driver.execute_script("arguments[0].type = 'file';", elem)
elem.send_keys("/Users/ue/Desktop/703.png")
告诉我它是否有效!