专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

Python+Selenium显示等待操作代码

概念

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

相关模块

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

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

显示等待代码如下:

 # #!/usr/bin/python3
 # -*- coding: utf-8 -*-
 # @Time : 2020/7/30 14:49
 # @Author : Gengwu
 # @FileName: Element_wait.py
 # @Software: PyCharm

 from selenium import webdriver #导入webdrive这个类
 from time import sleep
 from selenium.webdriver.support.ui import  WebDriverWait #注意区分大小写,导入WebDriverWait等待的类
 from selenium.webdriver.support import expected_conditions as EC #es,expected_conditions首字母,方便调用方法。as取一个别名,调方法的话直接EC.
 from  selenium.webdriver.common.by import By #通过by进行元素定位

 driver=webdriver.Chrome()
 driver.get('https://www.baidu.com/')
 driver.maximize_window() #最大化
 sleep(2) #强制等待2秒

 driver.find_element_by_css_selector('#kw').send_keys('selenium 自学网')

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

 driver.quit()

执行操作运行结果如下:

C:\Users\EDZ\Desktop\selenium_demo\venv\Scripts\python.exe C:/Users/EDZ/Desktop/selenium_demo/webdriver/Element_wait.py

Process finished with exit code 0

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

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

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

 driver.quit()

执行结果如下:

C:\Users\EDZ\Desktop\selenium_demo\venv\Scripts\python.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:\Users\EDZ\Desktop\selenium_demo\venv\lib\site-packages\selenium\webdriver\support\wait.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!

文章永久链接:https://tech.souyunku.com/45951

未经允许不得转载:搜云库技术团队 » Python+Selenium显示等待操作代码

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们