【问题标题】:stale element in selenium python 3.6selenium python 3.6中的陈旧元素
【发布时间】:2018-08-22 22:27:10
【问题描述】:

我的代码:

count = 1
next_page_string = "javascript:__doPostBack('ctl00$MainContent$grdResults','Page$" + str(count) + "')"
td_page_number_list = driver.find_elements_by_xpath("//*[@id='MainContent_grdResults']/tbody/tr[22]/td/table/tbody/tr/td/a")
for x in td_page_number_list:
      if x.get_attribute("href") == next_page_string:
                driver.execute_script("__doPostBack('ctl00$MainContent$grdResults','Page$" + str(count) + "')")

满足条件后driver object 转到execute_script 时,代码被破坏,给我错误:

stale element reference: element is not attached to the page document

这似乎与正在使用的 for 循环有关。我试过隐式等待但没有运气。

提前谢谢你。

【问题讨论】:

标签: python python-3.x selenium selenium-webdriver selenium-chromedriver


【解决方案1】:

每次脚本在循环中单击一个页码时,页面都会更改,selenium 会将其视为新页面。所以点击前在页面上找到的那些页码在新页面上是无效的。

要解决您的问题,简单的方法是在循环的每次迭代中再次在新页面上查找页码。

count = 1
next_page_string = "javascript:__doPostBack('ctl00$MainContent$grdResults','Page$" 
                  + str(count) + "')"
td_page_number_list = driver.find_elements_by_xpath(
   "//*[@id='MainContent_grdResults']/tbody/tr[22]/td/table/tbody/tr/td/a")

for x in td_page_number_list:
  if x.get_attribute("href") == next_page_string:
    driver.execute_script("__doPostBack('ctl00$MainContent$grdResults','Page$" 
                  + str(count) + "')")

    // find page numbers on new page again after click
    // i think you need to add some wait before find again 
    // like: time.sleep(5) or using selenium wait api
    td_page_number_list = driver.find_elements_by_xpath(
           "//*[@id='MainContent_grdResults']/tbody/tr[22]/td/table/tbody/tr/td/a")

【讨论】:

    【解决方案2】:

    我需要一个简单的breakdriver.execute_script() 方法之后。事实上,它正在执行__doPostBack,但在满足 if 条件后,for 循环仍在执行。我需要做的就是在满足条件后退出循环,这可以通过使用 break 条件来实现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-08
      • 1970-01-01
      • 2018-12-05
      • 2018-12-14
      • 2017-05-28
      • 2023-04-04
      • 2019-08-10
      相关资源
      最近更新 更多