【问题标题】:Python and Selenium: Locating and clicking a button for cookies within an iframePython 和 Selenium:在 iframe 中定位并单击 cookie 按钮
【发布时间】:2022-01-03 20:21:12
【问题描述】:

任何人都有一个解决方案,可以在网页中找到一个带有重叠弹出窗口的按钮,如下例所示:

from selenium import webdriver
driver = webdriver.Firefox(executable_path=r'./geckodriver')
driver.get("https://www.academics.de/")
#after waiting for a while the popup window comes up
driver.find_elements_by_xpath("//*[contains(text(), 'Zustimmen')]")

返回的列表为空。运行以下

driver.find_element_by_css_selector(".button-accept")

结果:

NoSuchElementException: Message: Unable to locate element: .button-accept

【问题讨论】:

    标签: python selenium xpath iframe css-selectors


    【解决方案1】:

    文本为 电子邮件登录 的元素在 iframe 内,因此您必须:

    • 诱导WebDriverWait 使所需的帧可用并切换到它

    • 诱导WebDriverWait 使所需的元素可点击

    • 您可以使用以下任一Locator Strategies

      • 使用CSS_SELECTOR

        driver.get("https://www.academics.de/")
        WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe[title='SP Consent Message']")))
        WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button[title='Zustimmen']"))).click()
        
      • 使用XPATH

        driver.get("https://www.academics.de/")
        WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@title='SP Consent Message']")))
        WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@title='Zustimmen']"))).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】:

      解决您的问题的一个简单方法是在您的 Selenium 实例上使用 uBlock Origin 扩展 + Fanboy's Annoyances 阻止列表,这样这些烦人的 cookie 消息就不会完全出现。 this StackOverflow answer 中描述了一种启用扩展的方法:

      1. 通过右键单击 Windows 开始按钮创建一个新的 Firefox 配置文件 > 运行 > firefox.exe -P
      2. 然后添加您想要的任何扩展程序,ublock、adblock plus 等
      3. 调用您的个人资料文件夹

      profile = selenium.webdriver.FirefoxProfile("C:/test")

      browser = selenium.webdriver.Firefox(firefox_profile=profile, options=ops)

      【讨论】:

        猜你喜欢
        • 2021-09-02
        • 2021-11-06
        • 2020-01-25
        • 1970-01-01
        • 1970-01-01
        • 2021-03-31
        • 2021-01-08
        • 2022-01-05
        • 2023-02-01
        相关资源
        最近更新 更多