【问题标题】:How to accept a cookie consent with Selenium Python如何使用 Selenium Python 接受 cookie 同意
【发布时间】:2023-01-24 18:28:45
【问题描述】:

我正在尝试接受 Selenium Python 的 cookie 同意。我尝试使用 CSS 选择器和 XPath 进行搜索,但没有任何效果。 这是 HTML:

<button class="sc-1epc5np-0 dnGUzk sc-f7uhhq-2 coEmEP button button--filled button__acceptAll" type="button"><span theme="[object Object]" class="sc-1vlt5h-0 sc-1epc5np-1 cMLEOX baseText">Accept Cookies</span></button>
    <span theme="[object Object]" class="sc-1vlt5h-0 sc-1epc5np-1 cMLEOX baseText">Accept Cookies</span>
</button>

我尝试了以下代码:

WebDriverWait(driver, 40).until(EC.presence_of_element_located((By.CSS_SELECTOR, '.sc-1vlt5h-0.sc-1epc5np-1.cMLEOX.baseText')))

我也试过:

driver.find_element_by_css_selector("cMLEOX").click()
driver.find_element_by_css_selector(".cMLEOX").click()

什么都不管用。解决办法是什么?

【问题讨论】:

    标签: python selenium xpath css-selectors webdriverwait


    【解决方案1】:

    所需的元素是动态元素,因此要在元素上单击()而不是 presence_of_element_located(),您需要为 element_to_be_clickable() 引入 WebDriverWait,您可以使用以下任一 locator strategies

    • 使用CSS_SELECTOR:

      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button.button__acceptAll > span.baseText"))).click()
      
    • 使用XPATH:

      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[contains(@class, 'button__acceptAll')]/span[text()='Accept Cookies']"))).click()
      
    • 笔记:您必须添加以下导入:

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

    【讨论】:

      【解决方案2】:

      我已经尝试使用不同页面提供的解决方案。但是这个网站使用Consent Management Platform (CMP) 以某种方式隐藏。 Selenium 无法解决该层中的任何元素 - 无论我等待多长时间。

      This is the Newspage I am trying to access

      这是我尝试过的:

      try:
          driver.get("https://www.kreiszeitung-wochenblatt.de")
          time.sleep(10)
      except:
          print('Page not found')
      
      wait = WebDriverWait(driver,15)
      
      try:
          frame = wait.until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,'/html/body/div[2]')))
      except:
          print("Frame not found")
      
      try:
          cookie = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,'#consentDialog > div.cmp_paywall > div > div.cmp_content > div > div.cmp_middle > div > div:nth-child(1) > div:nth-child(3) > div > div')))
          cookie.click()
      except:
          print('Button not found')
      

      我总是收到“找不到框架”

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-06-30
        • 1970-01-01
        • 2022-01-16
        • 1970-01-01
        • 2022-01-07
        • 2021-07-20
        • 1970-01-01
        相关资源
        最近更新 更多