• selenium 设置元素等待


    webdriver 有2种等待方式:显式等待和隐式等待

    显式等待

    定义:使webdriver等待某个条件成立时继续执行,否则达到最大时长时抛出异常

    WebdriverWait类是由WebDriver 提供的等待方法。在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间检测不到则会抛出异常。

    格式如下:

    WebDriverWait(driver,timeout,poll_frequency = 0.5,ignored_exceptions = None)
    • driver:浏览器驱动
    • timeout:最长超时时间默认以秒为单位
    • poll_frequency:检测的间隔时间,默认为0.5S
    • ignored_exceptions:超时后的异常信息,默认情况下抛出NoSuchElementException异常

    WebDriverWait()一般由until()或until_not()方法配合使用,下面是until()和until_not()方法的说明。

    • until(method,message  = ''+3)

    调用该方法提供的驱动程序为一个参数,知道返回值为False

    在以下示例中,通过as关键字将excepected_conditions重命名为EC,并调用presence_of_element_located()方法判断元素是否存在。

     1 #-*-coding:utf-8 -*-
     2 print("hello,world")
     3 from selenium import webdriver
     4 from selnium.webdriver.common.by import By
     5 from selnium.webdriver.support.ui import webdriverWait
     6 from selenium.webdriver.support import expected_conditions as EC
     7 
     8 driver = webdriver.Firefox()
     9 driver.get('http://www.baidu.com')
    10 
    11 element = webdriverWait(driver,5,0.5).until(
    12                         EC.presence_of_element_located((By.ID,'kw'))
    13                         )
    14 element.send_keys('selenium')
    15 driver.quit()

    隐式等待

    WebDriver提供了implicitly_wait()方法来实现隐式等待,默认设置为0,用法相对简单。

     1 #隐式等待
     2 from selenium import webdriver
     3 from selenium.common.exceptions import NoSuchElementException
     4 from time import ctime
     5 
     6 driver = webdriver.Firefox()
     7 
     8 #设置隐式等待为10s
     9 driver.implicitly_wait(10)
    10 driver.get("http://www.baidu.com")
    11 try:
    12     print(ctime())
    13     driver.find_element_by_id('kw22').send_keys('selenium')
    14 except NoSuchElementException as e:
    15     print(e)
    16 
    17 finally:
    18     print(ctime())
    19     driver.quit()

    implicitly_wait()默认参数的单位为秒,延时等待是在设定好的时间内,不断进行元素定位(轮询),定位到了就继续执行,定位不到则在设定的时间后抛出异常。

  • 相关阅读:
    JVM三部曲之运行时数据区 (第一部)
    c++鼠标点点,获取坐标值,放入到txt文件中
    自己实现的SVM源码
    SVM资料
    caffe源码解析
    caffe调试小结2
    caffe中卷积层和pooling层计算下一层的特征map的大小
    gpu对任意长度的矢量求和
    caffe代码调试小结
    caffe添加自己的层
  • 原文地址:https://www.cnblogs.com/aszeno/p/10311135.html
Copyright © 2020-2023  润新知