首页 > 编程问答 >如何使用 Selenium (python) 访问另一个影子根中影子根中的元素?

如何使用 Selenium (python) 访问另一个影子根中影子根中的元素?

时间:2024-08-01 04:12:08浏览次数:15  
标签:python selenium-webdriver web-scraping

我有以下代码和 HTML 结构(我不是这方面的专家)。

enter image description here

enter image description here

我正在尝试抓取 HTML 代码末尾的 96.00C 元素,其路径是:

Xpath: / /*[@id="_grid"]/set-class 2 /div 2 /text-binding//text() 完整 Xpath:/html/body/main/div/div 3 /div 3 /div/div 3 /div/div/div/div[5 ]/div 3 /div/div 3 /div 2 /div 3 /div 3 /bc -data-grid//div/div 3 /set-class 2 /div 2 /text-binding//text()

I'我能够访问 HTML 代码图像中位于顶部且具有蓝色阴影区域的元素,我将其保存在代码中名为“main”的对象上。问题是,当我尝试访问下面的元素时(以 <bc-data-grid data-ng-hide="error"... 开头的元素,它位于“#shadow-root (打开)”文本)我收到此错误:

enter image description here


为了访问 Selenium 中嵌套影子根内的元素,需要首先导航到每个影子根,然后再定位目标元素。

以下是使用的 HTML 结构和 XPath 的 Python 代码示例:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 初始化 WebDriver
driver = webdriver.Chrome()  # 或者选择的浏览器

# 打开网页
driver.get("YOUR_WEBSITE_URL")

# 等待主元素加载
main_element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "_grid"))
)

# 进入第一个影子根
shadow_root_1 = main_element.shadow_root

# 进入第二个影子根
shadow_root_2 = shadow_root_1.find_element(By.CSS_SELECTOR, 'bc-data-grid').shadow_root

# 定位目标元素
target_element = shadow_root_2.find_element(By.XPATH, '//div/div/set-class/div/text-binding')

# 获取元素文本
text = target_element.text

# 打印结果
print(text)

# 关闭浏览器
driver.quit()

代码解释:

  1. 导入必要的库:
  2. webdriver 用于控制浏览器。
  3. By 用于定位元素。
  4. WebDriverWait expected_conditions 用于等待元素加载。

  5. 初始化 WebDriver 并打开网页: 替换 YOUR_WEBSITE_URL 为实际网址。

  6. 等待主元素加载: 使用 WebDriverWait 等待 ID 为 "_grid" 的元素出现。

  7. 进入第一个影子根: 使用 shadow_root 属性访问第一个影子根。

  8. 进入第二个影子根: 使用 find_element 方法和 CSS 选择器 bc-data-grid 定位到第二个影子根的宿主元素,然后再次使用 shadow_root 属性进入。

  9. 定位目标元素: 使用提供的 XPath 定位目标元素。

  10. 获取元素文本: 使用 text 属性获取元素的文本内容。

  11. 打印结果: 将提取的文本打印到控制台。

  12. 关闭浏览器: 使用 driver.quit() 关闭浏览器。

注意事项:

  • 确保使用的 XPath 是正确的,并且能够唯一地标识目标元素。
  • 如果页面加载需要时间,请调整 WebDriverWait 的超时时间 (此处为 10 秒)。
  • 某些网站可能会使用多个嵌套的影子根。 在这种情况下,需要重复步骤 4 和 5 直到到达目标元素所在的影子根。

希望这对有所帮助! 如果有任何其他问题,请随时提问。

标签:python,selenium-webdriver,web-scraping
From: 78818215

相关文章

  • 在Python中,如何在一段时间内接受输入
    我正在尝试用Python制作一个蛇游戏,但不知道如何制作它,以便蛇在没有玩家输入的情况下继续移动,所以如果有人知道一个简单的方法来做到这一点,我需要在2秒后取消输入将不胜感激代码如下:importrandomimportsysplayerY=(1)playerX=(0)appleY=random.randint(1,10)appl......
  • 在Python中单步执行代码时是否可以引发异常
    当我在IDE(例如PyCharm)中单步执行代码时,我想转储函数的参数(以供以后使用,例如复制它)。计划的场景是在某处设置断点,然后引发异常(这不在我运行的代码中,这就是重点),并捕获它。代码应该如下所示:defexception_cathcher_decorator(func):try:returnfunc(*f_args,**f_k......
  • 解决python自动化操作异常处理的问题
    在python自动化领域,往往要用到pyautogui,pywin32等模块实现自动化操作。然而,这种自动化操作,本身具有一定的局限性,其中最主要的一个问题就是,一旦执行结果不按照脚本预设的来执行,往往会抛出异常,导致程序中断。解决这个问题,主要有这么几种思路:第一,每一次操作后分情况讨论。这种方......
  • Python爬虫入门03:用Urllib假装我们是浏览器
    文章目录引言Urllib库简介Request模块详解Error模块与异常处理Parse模块与URL解析Robotparser模块模拟浏览器请求使用Request方法添加请求头信息代码示例1.设置请求URL和请求头2.定义请求参数并转换为适当的格式3.使用Request方法封装请求4.发送请求并获取响应常用......
  • 请以零基础学Python 之 第二十讲 分组和贪婪匹配
    当我们处理字符串时,有时候需要根据特定的模式来分割或者提取信息。Python提供了强大的正则表达式库re,可以帮助我们实现这些复杂的字符串操作。本篇博客将介绍两个常用的正则表达式技巧:分组和贪婪匹配。分组(Grouping)在正则表达式中,分组是将多个模式单元组合为一个单元,以便......
  • 零基础学python 之 第十九讲 正则表达式
    当你开始学习Python编程时,正则表达式是一项非常强大的工具,用于处理文本数据中的模式匹配和搜索。本篇博客将带你从零开始学习如何在Python中使用正则表达式。1.什么是正则表达式?正则表达式(RegularExpression)是用于描述字符串模式的一种工具,可以用来匹配、查找、替换符合特......
  • python之贪吃蛇
    废话不多说,直接上代码(确保已经安装pygame)importpygameimportrandom#基础设置#屏幕高度SCREEN_HEIGHT=480#屏幕宽度SCREEN_WIDTH=600#小方格大小GRID_SIZE=20#颜色设置WHITE=(255,255,255)BLACK=(0,0,0)GREEN=(0,255,0)#初始化Pyg......
  • Python - Context Managers
    withstatementHereisthesyntaxofthewithstatement:withexpressionasvar:statementsTheexpressionshouldbeacontextmanagerobject,oritshouldproduceacontextmanagerobject.Whenthiswithstatementisexecuted,thefirstthingthat......
  • python装饰器
    一前言环境:win10python3.10二函数中的函数如果定义了一个函数A,现在想在不影响函数A原先功能的情况下,新增加一些额外的功能,怎么办,下面是一个例子如上,本来原先执行test_except那句话只会打印over那句话,但现在执行test_except却会输出一些另外的东西这其中有个巧妙地东西就......
  • Python - Built-in Exceptions: Python Exceptions Class Hierarchy
     Figure20.4:Built-inexceptionsTheclassBaseExceptionisthebaseclassofallthebuilt-inexceptionclasses.FromBaseException,fourclassesnamedException,SystemExit,KeyboardInterruptandGeneratorExitarederived.Alltheremainingbuilt-in......