selenium webdriver python:点

时间:2016-04-26 04:57:12

标签: python selenium selenium-webdriver

我需要点击页面中的一个元素,但页面每1-2秒刷新一次(ajax调用)。使用的浏览器是firefox。

代码:

ele = WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH, ".//*[@id='dojox_grid__View_1']/div/div/div/div/table/tbody/tr/td[1]/div")))
print ele
ele.click()

错误:

mouseOnover.click()
  File "/usr/lib/python2.6/site-packages/selenium-2.53.1-py2.6.egg/selenium/webdriver/remote/webelement.py", line 74, in click
    self._execute(Command.CLICK_ELEMENT)
  File "/usr/lib/python2.6/site-packages/selenium-2.53.1-py2.6.egg/selenium/webdriver/remote/webelement.py", line 457, in _execute
    return self._parent.execute(command, params)
  File "/usr/lib/python2.6/site-packages/selenium-2.53.1-py2.6.egg/selenium/webdriver/remote/webdriver.py", line 233, in execute
    self.error_handler.check_response(response)
  File "/usr/lib/python2.6/site-packages/selenium-2.53.1-py2.6.egg/selenium/webdriver/remote/errorhandler.py", line 194, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: Element is not clickable at point (267, 162.5). Other element would receive the click: <div style="width: 1360px; height: 621px;" id="dojox_grid_enhanced_plugins_Dialog_1_underlay" class="dijitDialogUnderlay dojoxGridFDTitlePane_underlay" tabindex="-1" data-dojo-attach-point="node"></div>

如何克服这个问题。

1 个答案:

答案 0 :(得分:2)

如果页面每两秒刷新一次,那么这个结果并不令人惊讶。您正在等待10秒钟才能获取元素,但到那时页面将刷新几次并使您持有的对象变得陈旧。无法单击过时元素。我的建议是等待身体元素并迅速抓住感兴趣的元素。

 wait = WebDriverWait(driver, 1)
 body = wait.until(EC.element_to_be_clickable((By.TAG,'body')))
 ele = wait.until(EC.element_to_be_clickable((By.XPATH, ".//*[@id='dojox_grid__View_1']/div/div/div/div/table/tbody/tr/td[1]/div")))
 print ele
 ele.click()

注1:您正在使用xpath选择元素。这很慢。通常它并不重要,但在你的情况下,你正在逆时针运行。试着通过id获取。如果相关元素没有id,请添加一个!

注意2:在所有这些之后,如果你仍然发现该元素不可点击,那就是因为其他一些元素正在覆盖它。重叠可能是透明的背景,所以你可能不会注意到。

仔细查看您的错误消息,它会显示width: 1360px; height: 621px;元素正在阻碍。在这个阶段,你的CSS似乎有一个n错误。最简单的方法是通过selenium execute javascript功能

更改它的CSS来隐藏这个有问题的元素