找到"文件上传"按钮与Selenium

时间:2017-01-31 10:55:48

标签: python selenium selenium-webdriver

我有下面显示的按钮(图片和HTML),我试图点击它。

Selenium无法找到它 - 我尝试通过xpath和ID进行定位。

<input id="wsUpload1" type="file" name="file">

XPATH:

element = driver.find_element_by_xpath('//input[@id="wsUpload1"]')
element.click()

我哪里错了?

编辑:这是Selenium抛出的例外:

  

selenium.common.exceptions.NoSuchElementException:消息:没有这样的元素:无法找到元素:{&#34;方法&#34;:&#34; xpath&#34;,&#34;选择器&#34;: &#34; //输入[@id =&#34; wsUpload1&#34;]&#34;}

3 个答案:

答案 0 :(得分:1)

不确定为什么找不到您的按钮,也许是因为引号(虽然在这种情况下它会显示错误),请尝试driver.find_element_by_xpath(".//input[@id='wsUpload1']")并查看它是否有效。我不确定你的按钮是否已在页面上呈现,或者你以某种方式触发它,所以它还不存在? 引发NoSuchElementException是因为您的目标元素无法在该页面上找到,可能是您在错误的页面上,元素尚未呈现,因此您应该等待它出现,元素可能是在某些iframe等中,当我不知道你的页面是如何工作的时候很难说。

但是,如果您尝试上传某些内容,则应在该按钮上执行sendKeys()(包含您尝试上传的文件路径),而不是click()。这就是selenium上传的工作原理。

答案 1 :(得分:1)

我已经解决了 - 驱动程序在侧面板上打开一个标签,按钮位于标签中。单击选项卡和出现的按钮之间似乎有几毫秒的延迟,所以我添加了一个等待,直到元素可点击,这似乎有效。

wait.until(EC.element_to_be_clickable((By.XPATH, "//input[@id='wsUpload1']"))).click()

答案 2 :(得分:1)

可能性

  1. 页面中具有相同ID的重复Web元素。
  2. 元素可能在框架中。您需要切换到框架
  3. 尝试在加载页面之前访问web元素。给予一些等待时间。