【问题标题】:Selenium - clicked windows does not open & no errorSelenium - 单击窗口不打开且没有错误
【发布时间】:2022-11-13 16:13:01
【问题描述】:

我的代码:

#Open Website
    profile_path = r'C:\Users\XXX\AppData\Local\Mozilla\Firefox\Profiles\ndefault-release'
    options = Options()
    options.binary_location = r'C:\Program Files\Mozilla Firefox\firefox.exe'
    options.set_preference('profile', profile_path)
    options.add_argument("--no-sandbox")        
    service = Service(r'C:\Users\XXX\geckodriver.exe')
    driver = Firefox(service=service, options=options)

    # declaration of variables 
    name = "x"
    suffix = "x"
    start_number = 1
    end_number = 1000

        for i in range(start_number, end_number):

            driver.get('https://www.bauhaus.info/gewinnspiel')
            time.sleep(3)
            #driver.find_element(by=By.XPATH, value=f"/div/div/div/div/div[2]/div/div[2]/div/div/div/button").click()        
            element = driver.execute_script("""return document.querySelector('#usercentrics-root').shadowRoot.querySelector("button[data-testid='uc-accept-all-button']")""")
            element.click()
            time.sleep(1)
            
            driver.switch_to.frame(0)
            time.sleep(1)
            driver.find_element(by=By.XPATH, value=f"/html/body/section/div/div/div/div[2]/div/div/div[1]/div[1]/form/div/div[3]/a").click()

            time.sleep(2)

如果我在 Firefox 控制台中添加 xpath,我会得到正确的输出:

数组 [a.btn.btn-primary]

但是只有当我手动单击它时,白色窗口才打开:

【问题讨论】:

  • 发布正确的 URL,您发布的 URL 未在图像中打开窗口。

标签: selenium selenium-webdriver


【解决方案1】:
shadow_host = driver.find_element(By.ID, "usercentrics-root")
shadow_root = shadow_host.shadow_root

WebDriverWait(shadow_root, 30).until(EC.presence_of_element_located((By.CSS_SELECTOR, "button[data-testid='uc-accept-all-button']"))).click()

iframe = WebDriverWait(driver, 30).until(EC.presence_of_element_located((By.CSS_SELECTOR, "iframe[title=' blackweekgewinnspiel']")))
driver.switch_to.frame(iframe)
canvas = driver.find_element(By.CSS_SELECTOR, "canvas")
driver.execute_script("arguments[0].scrollIntoView(true);",canvas)
driver.execute_script("arguments[0].click();", canvas);
driver.switch_to.default_content()

需要注意的两点:

  1. Accept Cookies 弹出窗口位于影子 DOM 中,因此 selenium 4.1 或更高版本 需要轻松访问它。
  2. 轮盘位于 iframe 中,因此在单击之前必须切换到那里。

【讨论】:

    猜你喜欢
    • 2013-08-10
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 2018-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多