• Python+Selenium显示等待操作代码


    概念

    • 显示等待是针对某一个元素进行相关等待判定;
    • 隐式等待不针对某一个元素进行等待,全局元素等待。

    相关模块

    • WebDriverWait 显示等待针对元素必用
    • expected_conditions 预期条件类(里面包含方法可以调用,用于显示等待)
    • NoSuchElementException 用于隐式等待抛出异常
    • By 用于元素定位

    案例:检测百度搜索按钮是否存在,存在的话就输入关键词搜索

    显示等待代码如下:

     1 # #!/usr/bin/python3
     2 # -*- coding: utf-8 -*-
     3 # @Time : 2020/7/30 14:49
     4 # @Author : Gengwu
     5 # @FileName: Element_wait.py
     6 # @Software: PyCharm
     7 
     8 from selenium import webdriver #导入webdrive这个类
     9 from time import sleep
    10 from selenium.webdriver.support.ui import  WebDriverWait #注意区分大小写,导入WebDriverWait等待的类
    11 from selenium.webdriver.support import expected_conditions as EC #es,expected_conditions首字母,方便调用方法。as取一个别名,调方法的话直接EC.
    12 from  selenium.webdriver.common.by import By #通过by进行元素定位
    13 
    14 driver=webdriver.Chrome()
    15 driver.get('https://www.baidu.com/')
    16 driver.maximize_window() #最大化
    17 sleep(2) #强制等待2秒
    18 
    19 driver.find_element_by_css_selector('#kw').send_keys('selenium 自学网')
    20 
    21 #当前页面,5s之内,每隔0.5s检测一次id=su的元素。直到查找到
    22 #显示等待
    23 element=WebDriverWait(driver,5,0.5).until(EC.presence_of_element_located((By.ID,'su'))) #搜索框元素的显示等待 until判断条件。跟进id进行定位,调用EC条件类
    24 element.click()
    25 
    26 driver.quit()

    执行操作运行结果如下:

    C:UsersEDZDesktopselenium_demovenvScriptspython.exe C:/Users/EDZ/Desktop/selenium_demo/webdriver/Element_wait.py

    Process finished with exit code 0

    可以找到具体元素,操作正常。

    假如我们把元素su改成其他的,查看是否找到,具体修改代码段如下:

    1 #当前页面,5s之内,每隔0.5s检测一次id=su的元素。直到查找到
    2 #显示等待
    3 element=WebDriverWait(driver,5,0.5).until(EC.presence_of_element_located((By.ID,'su123'))) #搜索框元素的显示等待 until判断条件。跟进id进行定位
    4 element.click()
    5 
    6 driver.quit()

    执行结果如下:

    C:UsersEDZDesktopselenium_demovenvScriptspython.exe C:/Users/EDZ/Desktop/selenium_demo/webdriver/Element_wait.py
    Traceback (most recent call last):
      File "C:/Users/EDZ/Desktop/selenium_demo/webdriver/Element_wait.py", line 23, in <module>
        element=WebDriverWait(driver,5,0.5).until(EC.presence_of_element_located((By.ID,'su123'))) #搜索框元素的显示等待 until判断条件。跟进id进行定位
      File "C:UsersEDZDesktopselenium_demovenvlibsite-packagesseleniumwebdriversupportwait.py", line 86, in until
        raise TimeoutException(message, screen, stacktrace)
    selenium.common.exceptions.TimeoutException: Message: 
    Stacktrace:
    Backtrace:
        Ordinal0 [0x01189563+2725219]
        Ordinal0 [0x01088551+1672529]
        Ordinal0 [0x00F70359+525145]
        Ordinal0 [0x00F09755+104277]
        Ordinal0 [0x00F253C0+218048]
        Ordinal0 [0x00F1AAD0+174800]
        Ordinal0 [0x00F23D7C+212348]
        Ordinal0 [0x00F1A94B+174411]
        Ordinal0 [0x00F02528+75048]
        Ordinal0 [0x00F035A0+79264]
        Ordinal0 [0x00F03539+79161]
        Ordinal0 [0x0109D607+1758727]
        GetHandleVerifier [0x012A6546+1050150]
        GetHandleVerifier [0x012A6291+1049457]
        GetHandleVerifier [0x012B10D7+1094071]
        GetHandleVerifier [0x012A6B46+1051686]
        Ordinal0 [0x01095B06+1727238]
        Ordinal0 [0x0109EB7B+1764219]
        Ordinal0 [0x0109ECE3+1764579]
        Ordinal0 [0x010B4C05+1854469]
        BaseThreadInitThunk [0x777C6359+25]
        RtlGetAppContainerNamedObjectPath [0x77B67C24+228]
        RtlGetAppContainerNamedObjectPath [0x77B67BF4+180]

    会看到报错信息:

    TimeoutException,时间超时,因为再5秒内找不到su123这个元素。
    百度搜索对应源码如下
     


    以上有问题欢迎随时沟通交流!
    Best Regards!
  • 相关阅读:
    Javascript学习笔记3 Javascript与BOM简介
    Javascript学习笔记2.3 Javascript与DOM实现动态表格效果
    Javascript学习笔记2.2 Javascript与DOM选项卡(滑动门)案例详解
    javascript是做什么的
    Javascript学习笔记2.1 Javascript与DOM简介
    Javascript学习笔记1 javascript的特点
    CSS3新增的选择器和属性
    DNSlog实现Mysql注入
    [转]Firefox+Burpsuite抓包配置(可抓取https)
    爬虫初窥day3:BeautifulSoup
  • 原文地址:https://www.cnblogs.com/gengwulovestudy/p/13404709.html
Copyright © 2020-2023  润新知