gpt4 book ai didi

python - 陈旧元素引用异常

转载 作者:行者123 更新时间:2023-11-30 22:12:12 25 4
gpt4 key购买 nike

我读过有关 StaleElementReferenceException 的内容在官方文档中,但我仍然不明白为什么我的代码会引发此异常? browser.get() 是否实例化一个新的蜘蛛?

class IndiegogoSpider(CrawlSpider):
name = 'indiegogo'
allowed_domains = [ 'indiegogo.com' ]
start_urls = [ 'https://www.indiegogo.com/explore/all?project_type=all&project_timing=all&sort=trending' ]

def parse(self, response):

if (response.status != 404):
options = Options()
options.add_argument('-headless')
browser = webdriver.Firefox(firefox_options=options)
browser.get(self.start_urls[0])

show_more = WebDriverWait(browser, 10).until(
EC.element_to_be_clickable((By.XPATH, '//div[@class="text-center"]/a'))
)

while True:
try:
show_more.click()
except Exception:
break

hrefs = WebDriverWait(browser, 60).until(
EC.visibility_of_all_elements_located((By.XPATH, '//div[@class="discoverableCard"]/a'))
)

for href in hrefs:
browser.get(href.get_attribute('href'))

#
# will be scraping individual pages here
#


browser.close()

我尝试了以下方法,但没有成功。我还尝试将 links 变量放置在脚本中的其他位置,在不同的范围内,也无济于事。

            links = []

for href in hrefs:
links.append(href.get_attribute('href'))

for link in links:
browser.get(href.get_attribute('href'))

#
# will be scraping individual pages here
#

不确定为什么 hrefs 尤其是 links 会从内存中删除?当我提取 hrefs 可迭代中每个项目的 href 属性值,然后将所有 URL 粘贴到 links 变量中时, links 列表不应该独立于 DOM 和页面更改吗?

现在不知道该怎么做。有什么想法吗?

最佳答案

正如文档所述:

在以下两种情况之一中会引发过时元素引用异常,第一种情况比第二种情况更常见:

  • 该元素已被完全删除。
  • 该元素不再附加到 DOM。

就您而言,它是:

  • 该元素不再附加到 DOM。

这是因为browser.get(href.get_attribute('href'))。当您重定向到另一个页面时,您的 DOM 将完全重新加载,并且 hrefs 不会引用上一页的元素。这就是您收到错误的原因。

如何处理这个错误?你可以这样做:

links = []

for href in hrefs: # store all links as a strings
links.append(href.get_attribute('href'))

for link in links: # then just use them
browser.get(link)

关于python - 陈旧元素引用异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51181949/

25 4 0
文章推荐: c# -