【问题标题】:Acessing shadow DOM elements with selenium使用 selenium 访问 shadow DOM 元素
【发布时间】:2020-04-15 20:33:03
【问题描述】:

基本上,我想访问一个出现在打印预览弹出窗口中的按钮,这是一个影子 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()

Inspect Element print

【问题讨论】:

    标签: python selenium automation shadow-dom


    【解决方案1】:

    在xpath下面试试:

     //cr-button[@class='action-button' and @role='button']
    

    【讨论】:

    • 当打印预览弹出窗口显示时没有任何反应。没有错误消息,但没有点击按钮。
    • 你能分享你的链接吗?我会尽快检查
    • 这里:portaltransparencia.gov.br/sancoes/… 点击“imprimir”按钮会弹出打印预览。
    【解决方案2】:

    如果有人遇到同样的问题,只需插入“-kiosk-printing”作为参数,如下所示:

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

    为我解决了问题。

    【讨论】:

      猜你喜欢
      • 2021-01-04
      • 2014-07-18
      • 2015-05-08
      • 1970-01-01
      • 1970-01-01
      • 2018-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多