代码之家  ›  专栏  ›  技术社区  ›  Himanshu Poddar

Selenium:切换到模式窗口句柄时出错

  •  0
  • Himanshu Poddar  · 技术社区  · 4 年前

    我有这个网页 https://account.proton.me/login?language=en 登录页面后,我试图切换到模式。请注意,即使您提供了错误的id和密码,模态也会出现,因此为了重现,您可以使用以下相同的代码

    driver.get('https://account.proton.me/login?language=en')
    usernameField = driver.find_element(By.XPATH,'//*[@id="username"]')
    usernameField.send_keys("kuchbhirandom@some.thing")
    passwordField = driver.find_element(By.XPATH,'//*[@id="password"]')
    passwordField.send_keys("yehbhikuchbhi")
    loginbutton = driver.find_element(By.XPATH,'//button[@type="submit"]')
    loginbutton.click()
    

    上面的代码为我们提供了模态

    enter image description here

    我试着检查一下车窗把手,然后一个接一个地切换到它们,这让我

    driver.window_handles
    ['CDwindow-34B695696D2295F87F84F06321D10117', 'CDwindow-212C47AEC0CCD8240A4F9675D5B5BEF2', 'CDwindow-5A39DFE9B9C75CFA7316BF2098765D05', 'CDwindow-796B9EF6777039A036CCF7C3D452807A', 'CDwindow-1DF355426CF56902DC339955FF55C9AE', 'CDwindow-1B700B499C716086FA269E89B0ED3835']
    
    for handle in driver.window_handles:
        driver.switch_to.window(handle)
        try:
            checkbox = driver.find_element(By.XPATH,'//div[@id="checkbox"]')
            print('found')
        except:
            pass
    

    但我得到了同样的错误“没有这样的元素”

    谈到解决captch:我有一个外部的API为我做这件事,但我需要点击这里的复选框,但在切换到模态部分时遇到了困难

    注意:要复制问题,您可以使用上面相同的代码,无需创建帐户。

    2 回复  |  直到 4 年前
        1
  •  1
  •   Kfir Doron    4 年前

    问题是你有两个嵌套 iframe s在站点中, 你必须表演 driver.switch_to.frame() 对于它们中的每一个:

    # After pressing "sign-in"
    captcha_iframe = driver.find_element(By.CSS_SELECTOR, '[title="Captcha"]')
    driver.switch_to.frame(captcha_iframe)
    inner_iframe = driver.find_element(By.CSS_SELECTOR, 'iframe')
    driver.switch_to.frame(inner_iframe)
    # Perform captcha check
    driver.find_element(By.CSS_SELECTOR, '#checkbox').click()
    

    请注意,每次 switch_to ,我直接使用新驱动程序的上下文,并且不在我找到的元素下执行搜索。