• 003 selenium iframe/等待


     

    '''
    时间:2018/11/29
    功能:iframe/等待
    目录:
        一: 登录禅道
        二: iframe
            1 单个iframe - name定位
            9 多个iframe - 索引定位
            3 跳转iframe
        三: 等待
            1 隐式等待
            2 显示等待
            3 sleep
       四: 登录126
    '''

    一: 登录禅道

    from selenium import webdriver
    import time
    
    driver = webdriver.Firefox()
    driver.get("http://127.0.0.1/zentao")
    
    time.sleep(1)
    driver.find_element_by_id("account").send_keys("admin")
    driver.find_element_by_name("password").send_keys("123456")
    driver.find_element_by_id("keepLoginon").click()
    
    time.sleep(2)
    driver.find_element_by_id("submit").click()

    二: iframe
      1 单个iframe - name定位

    <html>
    <!DOCTYPE html>
    <head>
        <meta charseti="UTF-8">
        <title> iframe demo</title>
    </head>
    <body>
    <iframe src="https://www.baidu.com" width="1000" height="600">
    </iframe>
    </body>
    </html>

    1 : 保存桌面命名为 test_iframe.html 。

    from selenium import webdriver
    import time
    
    driver = webdriver.Firefox()
    driver.get("file:///C:/Users/Administrator/Desktop/test_iframe.html")
    time.sleep(1)
    
    # 切入iframe
    ifame_baidu = driver.find_element_by_tag_name("iframe")
    driver.switch_to.frame(ifame_baidu)
    
    driver.find_element_by_id("kw").send_keys(u"汁虫 博客园")
    driver.find_element_by_id("su").click()

      2 多个iframe - 索引定位

    <html>
    <!DOCTYPE html>
    <head>
        <meta charseti="UTF-8">
        <title> iframe demo</title>
    </head>
    <body>
    <iframe src="test_iframe.html" width="1000" height="600">
    </iframe>
    </body>
    </html>

    1 : 保存桌面命名为 test_iframe_v2.html 。

    from selenium import webdriver
    import time
    
    driver = webdriver.Firefox()
    driver.get("file:///C:/Users/Administrator/Desktop/test_iframe_v2.html")
    
    # 切入iframe - 第一层
    time.sleep(1)
    ifame_baidu = driver.find_elements_by_tag_name("iframe")[0]
    driver.switch_to.frame(ifame_baidu)
    
    # 切入iframe - 第二层
    ifame_baidu_v2 = driver.find_element_by_tag_name("iframe")
    driver.switch_to.frame(ifame_baidu_v2)
    
    driver.find_element_by_id("kw").send_keys(u"汁虫 博客园")
    driver.find_element_by_id("su").click()

      3 跳转iframe

    # 跳出所有frame,回到主界面:    driver.switch_to_default_content()
    # 返回上一级iframe:       driver.switch_to.parent_frame() 

    三: 等待
      1 隐式等待

    隐式等待: 通过一定的时长等待页面上某元素加载完成,如果超过设置的时长元素还没有被加载,则抛出 NoSuchElementException异常
    from selenium import webdriver
    import time
    
    driver = webdriver.Firefox()
    driver.get("https://www.hao123.com")
    
    # 获取句柄 - 当前窗口
    time.sleep(2)
    driver.implicitly_wait(8)
    cur_handle = driver.current_window_handle
    print(cur_handle)
    driver.find_element_by_link_text("人民网").click()
    
    # 获取句柄 - 所有窗口
    driver.implicitly_wait(8)
    all_handle = driver.window_handles
    print(all_handle)
    
    # 获取句柄 - 最新窗口
    new = all_handle[-1]
    driver.switch_to.window(new)
    print(driver.title)
    
    # 切换窗口 - 开始窗口
    driver.switch_to.window(all_handle[0])
    print(driver.title)
    {0eb6de3e-0664-42a2-ae01-88aa2d5b4e6b}
    ['{0eb6de3e-0664-42a2-ae01-88aa2d5b4e6b}', '{ab6c327a-c2ee-41d3-ae05-292e5f37f94e}']
    人民网_网上的人民日报
    hao123_上网从这里开始

      2 显示等待

    显示等待: WebDriver等待某个条件成立时时间,否则在达到最大时间抛出 TimeoutException异常
    # coding:utf-8
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    driver = webdriver.Firefox()        # 启动浏览器 - Firefox
    driver.get("https://www.baidu.com")    # 访问url - 百度
    
    element = WebDriverWait(driver, 3, 0.5).until(       
                EC.presence_of_element_located((By.ID, "kw"))
                )
    driver.find_element_by_id("kw").send_keys("汁虫 博客园") # 定位 - 百度搜索框; 操作 - 键盘输入; 数据 - 汁虫 博客园
    driver.find_element_by_id("su").click()                # 定位 - 百度按钮; 操作 - 鼠标点击; 数据 - 无
    
    driver.quit()    # 退出程序

    1 : WebDriverWait - 等待三秒,每0.5秒检查一次。判断结果为True(until_not为False),判断条件为presence_of_element_located(判断元素是否存在)。

      3 sleep

    sleep休眠: 脚本执行到某一位置做固定时间的休眠
    作用:一般用打开链接、页面跳转、测试脚本
    # coding:utf-8
    from selenium import webdriver
    import time
    
    driver = webdriver.Firefox()        # 启动浏览器 - Firefox
    driver.get("https://www.baidu.com")    # 访问url - 百度
    
    # 步骤: 定位 + 操作 + 数据
    time.sleep(2)
    driver.find_element_by_id("kw").send_keys("汁虫 博客园") # 定位 - 百度搜索框; 操作 - 键盘输入; 数据 - 汁虫 博客园
    driver.find_element_by_id("su").click()                # 定位 - 百度按钮; 操作 - 鼠标点击; 数据 - 无
    
    time.sleep(3)
    driver.quit()    # 退出程序

    四: 登录126

    from selenium import webdriver
    import time
    driver = webdriver.Firefox()
    driver.get("https://mail.126.com/")
    
    time.sleep(2)
    driver.find_element_by_id("lbNormal").click()
    
    # 方法1
    # driver.switch_to.frame(2)
    
    # 方法2
    f = driver.find_elements_by_tag_name("iframe")[0]
    driver.switch_to.frame(f)
    
    driver.find_element_by_name("email").send_keys("111111")
    driver.find_element_by_name("password").send_keys("123456")
    driver.find_element_by_id("dologin").click()   # 点登陆按钮
  • 相关阅读:
    Python3基础 list [] 创建空列表
    Python3基础 list [] 创建整数列表
    Python3基础 iter+next 进行迭代时超出了范围 产生StopIteration异常
    Python3基础 frozenset 使用list创建frozenset
    Python3基础 filter+lambda 筛选出1-20之间的奇数
    Python3基础 filter 第一个参数为NONE时 结果只返回为True的对象
    Python3基础 dict 推导式 生成10以内+奇数的值为True 偶数为False的字典
    Python3基础 dict 创建字典 空字典
    Python3基础 dict setdefault 根据键查找值,找不到键会添加
    Python3基础 dict pop 弹出指定键的项
  • 原文地址:https://www.cnblogs.com/huafan/p/10037541.html
Copyright © 2020-2023  润新知