无法使用selenium和python上传照片

时间:2014-03-06 05:49:14

标签: python selenium

我正在尝试使用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的文章,我很确定我距离修复还有一步之遥。任何想法/建议/提示都会有所帮助。

2 个答案:

答案 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")

告诉我它是否有效!