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()`

  • 相关阅读:
    uoj110
    11.28模拟赛D题解
    AT1219 歴史の研究
    P5906 【模板】回滚莫队&不删除莫队
    P4175 [CTSC2008]网络管理
    SP32952 ADAFTBLL
    CF1479D Odd Mineral Resource
    SP10707 COT2
    P4074 [WC2013] 糖果公园
    P6134 [JSOI2015]最小表示
  • 原文地址:https://www.cnblogs.com/nuochengze/p/12866987.html
Copyright © 2011-2022 走看看