首页 > 解决方案 > 我在一个网站上发现了一个不可见的跨度,我无法抓取它!为什么?

问题描述

目前我正在尝试从网站上抓取数据。因此我使用硒。一切正常。直到我意识到我必须刮掉一个工具提示文本。

我已经在 stackoverflow 上找到了不同的线程来提供答案。无论如何,到目前为止我还没有设法解决这个问题。

经过几个小时的挫折,我意识到以下几点: 在此处输入图像描述

我猜这个跨度与工具提示无关。因为工具提示看起来像这样: 在此处输入图像描述

实际上有一个我无法阅读的跨度。我试着这样读:

bewertung = driver.find_elements_by_xpath('//span[@class="a-icon-alt"]')
for item in bewertung:
    print(item.text)

所以 Selenium 找到了这个元素。但不幸的是,'.text' 什么也没返回。为什么总是空的?第一个屏幕截图的跨度是什么?顺便提一句。它也不会显示在网站上。

标签: pythonselenium

解决方案


既然你提到Selenium finds this element,我假设你必须打印len列表bewertung

就像是

print(len(bewertung))

如果这个列表中有一些元素,你可能会使用innerText

bewertung = driver.find_elements_by_xpath('//span[@class="a-icon-alt"]')
for item in bewertung:
    print(item.get_attribute("innerText"))

请注意,您正在使用find_elementswhich 不会抛出任何错误,如果它没有找到element它,它将返回一个empty list.

所以如果你改用find_element它,它会抛出确切的错误。

另外,我认为您已经xpath完成了跨度(不会出现在 UI 中,有时它们直到触发某些操作才会出现。)

您可以尝试改用它xpath

//i[@data-hook='average-stars-rating-anywhere']//span[@data-hook='acr-average-stars-rating-text']

代码中是这样的:

bewertung = driver.find_elements_by_xpath("//i[@data-hook='average-stars-rating-anywhere']//span[@data-hook='acr-average-stars-rating-text']")
    for item in bewertung:
        print(item.text)

推荐阅读