zoukankan      html  css  js  c++  java
  • Python selenium 延时的几种方法

    解决网页加载缓慢的几种方法:

    一、显性等待WebDriverWait,配合该类的until()和until_not()方法,就能够根据判断条件而进行灵活地等待

    1 from selenium import webdriver
    2 from selenium.webdriver.support.wait import WebDriverWait
    3 
    4 driver = webdriver.Firefox()
    5 driver.get("https://www.baidu.com/")
    6 # 等待时长30秒,默认每0.5秒询问一次
    7 WebDriverWait(driver, 30).until(lambda x: x.find_element_by_id("kw")).send_keys("sky")
    8 # sel_count_info = WebDriverWait(driver, 30).until(lambda x: x.find_element_by_id("selCount")).text
    Wait Until

    WebDriverWait(driver, 超时时长, 调用频率, 忽略异常).until(可执行方法, 超时时返回的信息)

    WebDriverWait(driver, 超时时长, 调用频率, 忽略异常).until_not(可执行方法, 超时时返回的信息)

    可以用selenium提供的 expected_conditions 模块中的各种条件,也可以用WebElement的 is_displayed() 、is_enabled()、is_selected() 方法,或者用自己封装的方法都可以

    二、强制等待 sleep(xx),不建议总用这种等待方式,太死板,严重影响程序执行速度

    1 from selenium import webdriver
    2 from selenium.webdriver.support.wait import WebDriverWait
    3 
    4 driver = webdriver.Firefox()
    5 driver.get("https://www.baidu.com/")
    6 # 强制等待时长5秒
    7 driver.find_element_by_id("kw").send_keys("sky")
    Sleep

    三、隐性等待implicitly_wait(xx),隐性等待对整个driver的周期都起作用,所以只要设置一次即可

    1 from selenium import webdriver  
    2 
    3 driver = webdriver.Firefox() 
    4 # 隐性等待,最长等30秒 
    5 driver.implicitly_wait(30)  
    6 driver.get('https://huilansame.github.io') 
    implicitly_wait

    四、隐性显性并用

     1 from selenium import webdriver  
     2 from selenium.webdriver.support.wait import WebDriverWait  
     3 from selenium.webdriver.support import expected_conditions as EC  
     4 from selenium.webdriver.common.by import By  
     5 driver = webdriver.Firefox()  
     6 driver.implicitly_wait(10) # 隐性等待和显性等待可以同时用,但要注意:等待的最长时间取两者之中的大者  
     7 driver.get('https://huilansame.github.io')  
     8 locator = (By.LINK_TEXT, 'CSDN')  
     9 try:  
    10     WebDriverWait(driver, 20, 0.5).until(EC.presence_of_element_located(locator))  
    11     print(driver.find_element_by_link_text('CSDN').get_attribute('href'))  
    12 finally:  
    13     driver.close()  
    隐性显性同时使用
  • 相关阅读:
    不使用spring的情况下用java原生代码操作mongodb数据库的两种方式
    log4j配置输出到多个日志文件
    HIDL概述【转】
    Android HIDL学习(2) ---- HelloWorld【转】
    第2课第7节_Java面向对象编程_内部类_P【学习笔记】
    SDM439平台出现部分机型SD卡不能识别mmc1: error -110 whilst initialising SD card【学习笔记】
    第2课第6节_Java面向对象编程_包和权限_P【学习笔记】
    Android A/B System OTA分析(一)概览【转】
    查看DDR的频率【学习笔记】
    音频参数路径【学习笔记】
  • 原文地址:https://www.cnblogs.com/skyliao/p/9072782.html
Copyright © 2011-2022 走看看