当前位置: 首页 > 面试题库 >

Selenium单击一次,但单击一次将返回StaleElementReferenceException

周阳波
2023-03-14
问题内容
import sys
import urllib2
import time
from bs4 import BeautifulSoup
from selenium import webdriver
import string
import re

reload(sys)
sys.setdefaultencoding('utf8')

baseUrl = 'https://www.breastsurgeons.org/new_layout/membership/membersearch/index.php'

driver = webdriver.Chrome('/usr/local/Cellar/chromedriver/2.36/bin/chromedriver')
driver.get(baseUrl)
time.sleep(20)

for p in range(1,282):

    driver.find_element_by_xpath("//a[contains(text(),'>>')]").click()
    time.sleep(2)

driver.quit()

打开baseUrl后,我手动单击同意,然后搜索要显示的医生列表。我想翻阅清单。现在,Selenium仅通过找到“

”来第一次单击。之后它停止并给出以下错误。

   driver.find_element_by_xpath("//a[contains(text(),'>>')]").click()


  File "/Library/Python/2.7/site-packages/selenium-3.11.0-py2.7.egg/selenium/webdriver/remote/webelement.py", line 80, in click


    self._execute(Command.CLICK_ELEMENT)


  File "/Library/Python/2.7/site-packages/selenium-3.11.0-py2.7.egg/selenium/webdriver/remote/webelement.py", line 628, in _execute


    return self._parent.execute(command, params)


  File "/Library/Python/2.7/site-packages/selenium-3.11.0-py2.7.egg/selenium/webdriver/remote/webdriver.py", line 312, in execute


    self.error_handler.check_response(response)


  File "/Library/Python/2.7/site-packages/selenium-3.11.0-py2.7.egg/selenium/webdriver/remote/errorhandler.py", line 242, in check_response


    raise exception_class(message, screen, stacktrace)


selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document

问题答案:

错误说明了一切:

selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document

for()循环内的程序中,您将在页面上找到<a>文本标记为 > >*的taghtml" target="_blank">元素并进行调用,click()并且由于 HTML DOM
发生更改而导致该click()事件。当您的程序第二次迭代循环时,也许未加载标识为的 WebElement ,但是 Selenium
尝试引用以前已经 过时的 迭代中的搜索。因此,您会看到 StaleElementReferenceExceptionfor()

driver.find_element_by_xpath("//a[contains(text(),'>>')]") __

***

一种令人信服的迭代页面的方法是:

driver.find_element_by_xpath("//a[contains(text(),'>>')]").click()

可以诱导WebDriverWait在-结合expected_conditions子句设置为element_to_be_clickable为
WebElement 与特定 页码 (例如 345 ,等)是 可点击 如下:

WebDriverWait(self.driver, 30).until(EC.element_to_be_clickable((By.XPATH, "//a[contains(text(),'3')]"))).click()


 类似资料:
  • 问题内容: 打开baseUrl后,我手动单击同意,然后搜索要显示的医生列表。我想翻阅清单。现在,Selenium仅通过找到“ ”第一次单击。之后它停止并给出以下错误。 问题答案: 错误说明了一切: 在循环内的程序中,您将在页面上找到文本标记为 > >*的tag元素并进行调用,并且由于 HTML DOM 发生更改而导致的事件。当您的程序第二次迭代循环时,也许未加载标识为的 WebElement ,但

  • 我遇到了一个问题 我在谷歌上搜索了这个https://www.google.com/search?q=sen做 上面的链接也是如此,使用了下面的代码,但它只返回https://www.sendo.vn/(缺少参数) 这是密码 任何解决方案,以获得完整的网址路径与硒像手动点击?

  • 我想在点击某个div(“.checker”)后触发点击输入事件。换句话说,点击'.checker'将模拟点击复选框上的点击事件,远程检查它。 我写的代码可以工作,但click只有在第二次单击后才触发,第一次单击失败时才触发。这种情况甚至不会发生在'.checker'上,也会发生在checkbox上。 下面的所有HTML都包装在jquery折叠菜单中。单击“H3”后,“.sub-tree-wrap”

  • 我使用FullCalendar作为用户安排约会的界面。当我加载日历时,我会根据当天已排定的约会数量来绘制各个日期。代码如下: 我添加的每个类都有一个背景颜色。 但是,当用户单击prev、next或today按钮时,日历将完全重新加载,并且删除我添加的类。 我在这里看到了一个类似的问题,但他的解决方案涉及在事件对象本身中传递额外的数据。我在处理那些没有过去的日子。 有没有任何方法可以触发一个事件后,

  • 我已经用selenium编写了一个自动化测试用例来测试登录页面,应该点击忘记密码链接。浏览器打开并转到给定的url,但忘记密码链接不会自动点击,有人能告诉我的代码有什么问题吗。 基本代码 Browsers.java 数据属性 控制台: 超文本标记语言代码

  • 问题内容: 当用户单击DIV时,如何突出显示/选择DIV标签的内容…这个想法是所有文本都被突出显示/选中,因此用户不需要用鼠标手动突出显示文本,并且可能错过了一点文字? 例如,假设我们有一个DIV,如下所示: …并且当用户单击该URL中的任何URL时,整个URL文本将突出显示,以便他们可以轻松地在浏览器中四处拖动所选文本,或右键单击复制完整的URL。 谢谢! 问题答案: 现在,您必须将ID作为参数