无法使用 Selenium (Python) 从雅虎新闻中找到某些元素

问题描述 投票:0回答:1

我正在尝试从雅虎新闻收集评论,但无法使用 Selenium 找到评论部分的文本元素。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
test = "https://www.yahoo.com/news/cdc-advisers-recommend-spring-covid-215003196.html"

# open comments
driver = webdriver.Chrome()
driver.get(test)

comment_button = driver.find_element(By.XPATH, '//a[@class="link caas-button noborder caas-tooltip flickrComment caas-comment top"]')
comment_button.click()

我可以单击评论按钮(以便将其打开),到目前为止这部分没有问题。但是,我很难找到评论部分的文字。

screenshot of the website

红色部分是我想要查找的示例,这是该部分的压缩 html。

<div class="components-MessageContent-index__messageEntitiesWrapper">
   <div class="components-MessageContent-components-MessageEntities-MessageEntities__message-entities components-MessageContent-components-MessageEntities-MessageEntities__is-column">
      <span class="Typography__text--11-4-15 Typography__t4--11-4-15 Typography__l6--11-4-15">
         <div data-spot-im-class="message-text">
            <p>...</p>
         </div>
      </span>
   </div>
</div>

我尝试了以下不同的元素,但没有一个起作用。

# 1
driver.find_element(By.XPATH, '//div[@class="components-MessageContent-index__messageEntitiesWrapper"]')

# 2
driver.find_element(By.XPATH, '//div[@class="components-MessageContent-components-MessageEntities-MessageEntities__message-entities components-MessageContent-components-MessageEntities-MessageEntities__is-column"]')

# 3
driver.find_element(By.XPATH, '//span[@class="Typography__text--11-4-15 Typography__t4--11-4-15 Typography__l6--11-4-15"]')

# 4
driver.find_element(By.XPATH, '//div[@data-spot-im-class="message-text"]')

我也尝试过

driver.find_elements(By.XPATH, '')
driver.find_element(By.CLASS_NAME, '')
driver.find_elements(By.CLASS_NAME, '')

但它们也不起作用。我收到一条错误消息,如下所示;

NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//div[@class="components-MessageContent-index__messageEntitiesWrapper"]"}

我是否输入了错误的 Xpath,或者我应该使用 Xpath 之外的其他语法?或者说使用 Selenium 基本上不可能抓取这个网站的评论部分?我将不胜感激任何有关此事的帮助。谢谢!

python html selenium-webdriver web-crawler
1个回答
0
投票

问题在于评论元素位于影子根内部。要访问它们,您需要切换到影子根元素,然后找到您想要的元素。

shadow_host = driver.find_element(By.CSS_SELECTOR, '#spotim-specific > div > div')
shadow_root = shadow_host.shadow_root
message = shadow_root.find_element(By.CSS_SELECTOR, 'div.components-MessageContent-index__messageEntitiesWrapper')
© www.soinside.com 2019 - 2024. All rights reserved.