zoukankan      html  css  js  c++  java
  • python之selenium三种等待方法

    前提:

    我们在做Web自动化时,有的时候要等待元素加载出来,才能操作,不然会报错

    1.强制等待

    2.隐式等待

    3.显示等待

    内容:

    一,强制等待

    这个比较简单,就是利用time模块的sleep的方法来实现

    例子:

     1 # coding = utf-8
     2 from time import sleep
     3 from selenium import webdriver
     4 # 启动浏览器
     5 driver = webdriver.Chrome()
     6 # 打开百度首页
     7 driver.get(r'https://www.baidu.com/')
     8 # 等待3秒
     9 sleep(3)
    10 driver.find_element_by_css_selector("#kw").send_keys("selenium")
    11 # 退出
    12 driver.quit()

    这个就是强制等待3秒,不管你怎么样,就是给我停3秒,强制性的

    二,隐式等待

    隐式等待就是浏览器会在内部执行等待,但是我们可能看不出来他等待了

    例子:

    # coding = utf-8
    from selenium import webdriver
    # 启动浏览器
    driver = webdriver.Chrome()
    # 打开百度首页
    driver.get(r'https://www.baidu.com/')
    driver.find_element_by_css_selector("#kw").send_keys("selenium")
    driver.find_element_by_css_selector("#su").click()
    # 隐式等待30秒
    driver.implicitly_wait(30)
    result = driver.find_elements_by_css_selector("h3.t>a")
    for i in result:
        print(i.text)
    # 退出
    driver.quit()

    三,显示等待

    因为隐式等待有缺陷,比如你想要元素加载出来就执行下面的事情,怎么办,这个要用显示等待了

    显示等待要用到WebDriverWait,配合该类的until()和until_not()方法,就能够根据判断条件而进行灵活地等待了。它主要的意思就是:程序每隔xx检查一次,如果条件成立了,则执行下一步,否则继续等待,直到超过设置的最长时间,然后抛出TimeoutException

    例子:

    # coding = utf-8
    from selenium import webdriver
    from selenium.webdriver.support.wait import WebDriverWait
    # 启动浏览器
    driver = webdriver.Chrome()
    # 打开百度首页
    driver.get(r'https://www.baidu.com/')
    driver.find_element_by_css_selector("#kw").send_keys("selenium")
    driver.find_element_by_css_selector("#su").click()
    # 超时时间为30秒,每0.2秒检查1次,直到class="tt"的元素出现
    text = WebDriverWait(driver,30,0.2).until(lambda x:x.find_element_by_css_selector(".tt")).text
    print(text)
    # 退出
    driver.quit()
  • 相关阅读:
    运用Scapy编写类似于Nmap的端口扫描脚本
    centos7 下安装arping工具
    Redis protected-mode属性解读
    centos7编写自己的服务,运行systemctl后卡住了(即shell阻塞了)
    logback日志增加行号
    nginx隐藏版本号server_tokens
    关于数据库Oracle表字段为NVARCHAR2 与Mybatis Generator运用问题
    浅析MySQL的分区(Partition)功能
    浅析PostgreSQL序列(SEQUENCE)、常用序列操作、数据迁移后更新序列流程
    浅析mybatis里的缓存机制
  • 原文地址:https://www.cnblogs.com/syayy/p/11720256.html
Copyright © 2011-2022 走看看