【问题标题】:Selenium webdriver with python (stale element reference)带有 python 的 Selenium webdriver(过时的元素参考)
【发布时间】:2017-04-27 22:04:33
【问题描述】:

最近,我一直在尝试使用 Python 和 Selenium chromedriver 进行 Web-Scraping 和 Crawling。 它是一个有线程的reddit页面,每个线程都有一个标题。单击标题时,它会转到该特定线程。主题由描述和内容组成。

我想做什么:

  • 第 1 步)访问 reddit 页面
  • 步骤2)扫描所有标题,将它们存储在一个数组中
  • 步骤 3) 循环遍历 Title 数组中的每个项目
  • 第四步)点击标题
  • 第五步)获取描述
  • 第 6 步)返回
  • 步骤 7) 如果有标题 从步骤 3 开始 否则单击下一步 并获得下一页并从第 1 步开始。

我已经能够获得标题,甚至可以点击我的标题。但是当它返回时,它在这一行给我一个错误:单击并返回页面一次后,步骤 3 中的 data['title'].append(title.text) 。并返回一条错误消息,说明:“消息:过时的元素引用:元素未附加到页面文档”

无法调试此问题,因为我对 python 还很陌生。任何帮助将不胜感激。

代码如下:

for i in range(0,3):
    titles = []
    titles = browser.find_elements_by_css_selector(".title.may-blank")
    for title in titles:
        i = i+1
        try:
            data['title'].append(title.text)
        except KeyError:
            data['title'] = [title.text]
        title.click()
        description = browser.find_element_by_css_selector(".usertext-body.may-blank-within.md-container")
        print description.text
        browser.execute_script("window.history.go(-1)")
    button = browser.find_element_by_class_name("next-button")
    button.click()
print data['title']

【问题讨论】:

    标签: python selenium selenium-chromedriver


    【解决方案1】:

    每次导航到另一个页面时,您都需要找到元素。

    我会稍微改变一下您的代码流程。不要点击标题,而是尝试获取 href 属性,然后导航到这些 url。

    另外,我假设您通过 Selenium 执行此操作是为了练习您的技能。如果没有,我推荐Reddit API

    【讨论】:

    • 这确实帮助了我。是的,你是对的,现在我想坚持使用硒。现在的问题是页面有类似的类,我希望选择其中之一。到目前为止,我的研究表明它可以通过使用索引的 xpath 来完成。但我做不到。你能帮我解决这个问题吗?
    • 哦,我想问题已经解决了,我使用 xpath 和 index 在正确的路径上,但在语法上它是不正确的。谢啦。你解决了我的问题!!!
    • 因为我想使用类名“md”的第二个兄弟,所以我使用这个 browser.find_element_by_xpath("(//div[@class='md'])[2]" 解决了它)。以防万一,如果有人碰巧遇到这样的问题。再次感谢@Michal K。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-27
    • 1970-01-01
    • 1970-01-01
    • 2017-12-13
    • 2020-12-21
    • 2023-04-06
    • 1970-01-01
    相关资源
    最近更新 更多