• selenium 隐式等待、显示等待


    from selenium import webdriver
    # 显示等待-提供等待条件
    from selenium.webdriver.support import expected_conditions as ec
    # 显示等待-显示等待类
    from selenium.webdriver.support.ui import WebDriverWait
    # 显示等待
    from selenium.webdriver.common.by import By
    
    driver = webdriver.Chrome()
    # 隐式等待,设置一个超时时间,在这个时间内,不断的寻找元素,超时找不到就抛出异常
    # 隐形等待10秒
    # driver.implicitly_wait(10)
    """
    一次声明,终生有效--对其后执行的每一行元素定位都有效
    所以,通常在创建driver之后就声明了。
    执行逻辑:
           当前代码执行元素定位操作的时候,若找得到元素,则继续执行
           若找不到元素,则等待0.5秒,然后再找一次,若还是找不到,则又等0.5秒再找
           如此循环,知道找到元素,若找到元素,则继续执行代码
           若达到超时时间,还是不能找到元素,则抛出timeout异常
    隐式等待,需页面全部加载完成再执行,相对浪费时间(页面虽然加载完成了,但是不代表所有元素都出现了
    """
    driver.get("http://127.0.0.1:8088/login")
    driver.find_element_by_name("username").send_keys("libai")
    driver.find_element_by_name("password").send_keys("opmsopms123")
    driver.find_element_by_class_name("btn-login").click()
    # 如果代码中存在大量的强制等待,会导致脚本无意义的拉长执行时间
    # time.sleep(3)
    # 可以用智能等待来解决这个问题
    
    # 显示等待:设置一个超时时间和一个元素查找条件,在这个时间内,不断寻找元素,超时找不到就会报错
    """
    不需要页面全部加载完成,相对节省时间
    只对申明了显示等待的元素生效
    """
    # 代码量多,且括号多,容易出错,写显示等待代码的时候,多多注意检查
    # 每隔1秒 检查一次,最多等待10秒(最大超时时间)
    ele = WebDriverWait(driver, 10, 1).until(
        #  visibility_of_element_located()里面传一个参数,所以里面的参数需要再加一个()
        ec.visibility_of_element_located(
            (
            By.CSS_SELECTOR, "body > section > div.left-side.sticky-left-side > div.left-side-inner > ul > li:nth-child(2)")
        )
    )
    # 显示等待这一大段,最终就会返回你想寻找的元素(若超时找不到,也会报timeout异常)
    """
    申明一个隐式等待,全局通用
    对于一些加载特别缓慢的元素,设置显示等待,适当为其增加等待时间
    当显示等待与隐式等待同时出现的时候,取时间更多的一个生效
    """
    ele.click()
    世界上最美的风景,是自己努力的模样
  • 相关阅读:
    SQLServer.Produce的研究
    petshop以异步方式插入订单的疑惑(后面理解了)
    SQLHelper.GetCachedParameters方法之缓存
    DALFactory抽象工厂理解
    petshop异时消息处理队列抽象工厂
    AJAX学习2(经典)
    对SQLServerDAL.order的研究(不错,有心得)
    Invertory类对商品库存的更新困惑解决了
    AJAX学习1
    用DataSet读取xml文件
  • 原文地址:https://www.cnblogs.com/xiong-hua/p/14934702.html
Copyright © 2020-2023  润新知