【问题标题】:How to interact with Cookie pop within #shadow-root (open) using Selenium如何使用 Selenium 在#shadow-root (open) 中与 Cookie pop 交互
【发布时间】:2022-02-10 04:48:22
【问题描述】:

我想废弃 immowelt.de,但我无法通过 cookie 横幅。 我尝试使用 sleep() 和 WebDriverWait 等待横幅加载,但是它们都不起作用。

这是带有 webdriver 的代码

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

chrome_driver_path = '.../chromedriver'
url = 'https://www.immowelt.de/immobilienpreise'
driver = webdriver.Chrome(executable_path=chrome_driver_path)

driver.get(url)

WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="uc-center-container"]/div[2]/div/div/div/div[1]/button'))).click()

driver.close()

这是带有睡眠的代码

from selenium import webdriver
import time
from selenium.webdriver.common.by import By

chrome_driver_path = '.../chromedriver'
url = 'https://www.immowelt.de/immobilienpreise'
driver = webdriver.Chrome(executable_path=chrome_driver_path)

driver.get(url)
time.sleep(5)
driver.find_element(By.XPATH, '//*[@id="uc-center-container"]/div[2]/div/div/div/div[1]/button').click()

driver.close()

【问题讨论】:

    标签: selenium selenium-webdriver cookies shadow-dom queryselector


    【解决方案1】:

    元素OK#shadow-root (open)内。


    解决方案

    要点击OK,你必须使用shadowRoot.querySelector(),你可以使用下面的Locator Strategy

    • 代码块:

      driver.get("https://www.immowelt.de/immobilienpreise")
      time.sleep(5)
      element = driver.execute_script("""return document.querySelector('#usercentrics-root').shadowRoot.querySelector("button[data-testid='uc-accept-all-button']")""")
      element.click()
      

    参考

    您可以在以下位置找到一些相关讨论:

    【讨论】:

      猜你喜欢
      • 2020-07-05
      • 2019-10-16
      • 2021-10-09
      • 2020-10-29
      • 2022-01-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多