zoukankan      html  css  js  c++  java
  • selenium定位iframe中的元素

    1、问题描述

      用selenium模拟登录豆瓣的时候发现无法定位到登录选项,查看网页源代码发现嵌套了iframe

      iframe标记又叫浮动帧标记,可以用它将一个HTML文档嵌入在一个HTML中显示,<iframe></iframe>所包含的内容与整个页面是一个整体,应用iframe可以在同一个页面中多次显示同一内容,而不必重复这段内容的代码。

    2、分析思路

      (1)需要切换到iframe

        需要用到driver.switch_to.frame()方法

        # 用id定位  `driver.switch_to.frame("iframe")`

        # 用name定位  `driver.switch_to.frame("myiframe")`

        # 用index定义  `driver.switch_to.frame("index")`

        # 用WebElement定位  `driver.switch_to.frame("WebElement")`  

    from selenium import webdriver
    
    driver = webdriver.Chrome()
    
    driver.get("https://www.douban.com/")
    
    address_iframe = driver.find_element_by_xpath("//div[@class='login']/iframe")
    
    # 切换到iframe
    driver.switch_to.frame(address_iframe)

      (2)定位成功后就可以通过ActionChains执行相应的模拟操作

    from selenium import webdriver
    from selenium.webdriver import ActionChains
    import time
    
    driver = webdriver.Chrome()
    
    driver.get("https://www.douban.com/")
    
    iframe = driver.find_element_by_xpath("//div[@class='login']/iframe")
    
    driver.switch_to.frame(iframe)
    
    ac = driver.find_element_by_xpath("//li[@class='account-tab-account']")
    ActionChains(driver).move_to_element(ac).click(ac).perform()
    
    # 移动到密码登录选项
    ac = driver.find_element_by_class_name("account-tab-account")
    ActionChains(driver).move_to_element(ac).click(ac).perform()
    time.sleep(1)
    # 输入账号
    driver.find_element_by_id("username").send_keys("输入账号")
    # 输入密douban码
    driver.find_element_by_id("password").send_keys("输入密码")
    time.sleep(2)
    # 点击登录
    driver.find_element_by_partial_link_text("登录豆瓣").click()
    time.sleep(2)

    # 获取cookie
    cookie = driver.get_cookies()
    print([dict(i["name"]:i["value"]) for i in cookie])
    driver.quit()

      (3)切换到frmae中之后,便不能继续操作主文档中的元素,这时需要切换回主文档

        # 切换到父frame,相当于后退  `driver.switch_to.parent_frame()`

        # 切换到主文档  `driver.switch_to.default_content()`

  • 相关阅读:
    Codeforces 1368F
    Codeforces 1364C
    Hiho1422 Harmonic Matrix Counter (高斯消元)
    Codeforces 19D
    P3164 [CQOI2014]和谐矩阵(高斯消元 + bitset)
    P4254 [JSOI2008]Blue Mary开公司 (李超树)
    P4755 Beautiful Pair (分治 + 主席树)
    P4587 [FJOI2016]神秘数(主席树)
    分布式锁实现,与分布式定时任务
    redis应用场景,缓存的各种问题
  • 原文地址:https://www.cnblogs.com/nuochengze/p/12866987.html
Copyright © 2011-2022 走看看