当前位置: 首页 > 知识库问答 >
问题:

使用selenium访问阴影DOM元素

苏鹏鹍
2023-03-14

基本上,我想访问一个出现在打印预览弹出窗口中的按钮,这是一个阴影dom元素。我尝试了一些我在stackoverflow周围找到的解决方案,但是它们不起作用,就像我试图构建的当前代码一样,它是:

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



driver = webdriver.Chrome()

wait = WebDriverWait(driver, 10)



def expand_shadow_root(element):

    shadow_root = driver.execute_script("return arguments[0].shadowRoot", element)

    return shadow_root


root1 = driver.find_element_by_tag_name("print-preview-button-strip")

shadow_root1 = expand_shadow_root(root1)

btn = shadow_root1.find_element_by_xpath("/html/body/print-preview-app//print-preview-sidebar//print- 
preview-button-strip//cr-button[1]")

wait.until((EC.element_to_be_clickable(By.XPATH,"/html/body/print-preview-app//print-preview- 
sidebar//print-preview-button-strip//cr-button[1]")))

btn.click()

检查元素打印

共有2个答案

薛英卫
2023-03-14

如果有人有同样的问题,只需插入“-kiosk-print”作为参数,像这样:

options = webdriver.ChromeOptions()
options.add_argument("-kiosk-printing")
driver = webdriver.Chrome(options=options)

为我解决了问题。

张晔
2023-03-14

尝试下面的xpath:

 //cr-button[@class='action-button' and @role='button']
 类似资料:
  • 是否可以使用Selenium/Chrome WebDriver访问影子DOM中的元素? 有人成功了吗?

  • 我可以通过以下方式访问dev中的用户名: 有没有其他方法可以通过webdriver访问ShadowDOM元素?

  • shadowdom结构:在上面的shadowdom结构中,我们可以在chrome中使用selenium和javascript访问各个元素,如下所示: 在Firefox中://div[@class='Style-Sconk-tabs'而不是(@隐藏)]//div/span[包含(text(),'AttrName')]/.../前驱兄弟姐妹::div/puch-icon-按钮[1]/铁图标[1] 在C

  • 有没有可能用蟒蛇硒在阴影DOM中找到元素? 示例用例: 我用输入了这个

  • 问题内容: 我正在使用Java Selenium项目进行网页自动化。该网页包含许多我无法使用selenium 方法进行交互的多层影子根DOM元素。 我尝试了以下解决方案: Deep CSS(不适用于最新的Chrome浏览器) JS执行器。(这确实很繁琐,并且维护起来很复杂) 注意: 如果您知道我可以在Selenium Java框架中实现的除以上所列之外的任何其他解决方案,请传递该解决方案。提前致谢

  • 我正在测试一个使用shadow dom的新应用程序,如下所示: 有人知道我如何访问文件选择器控件中的元素吗?特别是关闭图标?