【问题标题】:StaleElementReferenceException selenium webdriver pythonStaleElementReferenceException selenium webdriver python
【发布时间】:2014-11-15 09:57:09
【问题描述】:

我正在使用 Selenium、Python 和 PhantomJS 编写一个爬虫,以使用 Google 的反向图像搜索。到目前为止,我已经成功地上传了一张图片并在第一页抓取了搜索结果。但是,当我尝试单击搜索结果导航时,我收到了 StaleElementReferenceError。我在很多帖子中都读过它,但我仍然无法实施该解决方案。这是中断的代码:

ele7 = browser.find_element_by_id("nav")
ele5 = ele7.find_elements_by_class_name("fl")

count = 0
for elem in ele5:
    if count <= 2:
        print str(elem.get_attribute("href"))
        elem.click()
        browser.implicitly_wait(20)
        ele6 = browser.find_elements_by_class_name("rc")
        for result in ele6:
            f = result.find_elements_by_class_name("r")
            for line in f:
                link = line.find_elements_by_tag_name("a")[0].get_attribute("href")
                links.append(link)
                parsed_uri = urlparse(link)
                domains.append('{uri.scheme}://{uri.netloc}/'.format(uri=parsed_uri))
            count += 1 

代码在 print str(elem.get_attribute("href")) 处中断。我该如何解决这个问题?

提前致谢。

【问题讨论】:

    标签: python python-2.7 selenium phantomjs


    【解决方案1】:

    点击一个链接会导致浏览器转到另一个页面;对旧页面中的元素(ele5elem)的引用无效。

    修改代码不引用无效元素。

    例如,您可以在访问其他页面之前获取 url:

    ele7 = browser.find_element_by_id("nav")
    ele5 = ele7.find_elements_by_class_name("fl")
    
    urls = [elem.get_attribute('href') for elem in ele5]  # <-----
    
    browser.implicitly_wait(20)
    
    for url in urls[:2]:  # <------
        print url
        browser.get(url)  # <------ used `browser.get` instead of `click`.
                          #         ; using `element.click` will cause the error.
    
        ele6 = browser.find_elements_by_class_name("rc")
        for result in ele6:
            f = result.find_elements_by_class_name("r")
            for line in f:
                link = line.find_elements_by_tag_name("a")[0].get_attribute("href")
                links.append(link)
                parsed_uri = urlparse(link)
                domains.append('{uri.scheme}://{uri.netloc}/'.format(uri=parsed_uri))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-18
      • 2018-09-14
      • 1970-01-01
      • 2012-04-24
      • 2014-03-03
      • 1970-01-01
      • 2015-01-16
      • 1970-01-01
      相关资源
      最近更新 更多