Python selenium 三种等待方式解读

yizhihongxing

当使用selenium库对网页进行自动化测试时,由于网络环境、网页内容等因素,可能会出现代码执行速度与页面加载速度不同步的情况,为了解决这个问题,我们需要用到等待机制。

在selenium中,常用的等待方式有三种:隐式等待、显式等待和JavaScript等待。

一、隐式等待

隐式等待是在代码中进行全局设置,一旦设置后,对后续操作都有效。具体实现方式为在创建driver对象后,调用driver对象的implicitly_wait方法,设置等待时间,单位为秒。之后,在执行每个查找元素或者其他操作时,如果元素没有被找到,会等待若干秒再次查找,直到超过设置的等待时间后仍然没有找到元素,就会抛出NoSuchElementException异常。

隐式等待的优点是设置一次后对整个代码都有效,避免了不必要的代码重复,但是有时候效率不够高,因为代码执行速度与网页加载速度可能不一致。

示例1:

from selenium import webdriver

driver = webdriver.Chrome()

# 设置隐式等待时间为10秒
driver.implicitly_wait(10)

# 打开百度首页
driver.get("https://www.baidu.com")

# 查找输入框
search_input = driver.find_element_by_id("kw")

# 输入搜索内容
search_input.send_keys("Selenium")

# 查找搜索按钮
search_button = driver.find_element_by_id("su")

# 点击搜索按钮
search_button.click()

# 关闭浏览器
driver.quit()

示例2:

from selenium import webdriver

driver = webdriver.Chrome()

# 设置隐式等待时间为10秒
driver.implicitly_wait(10)

# 打开慕课网首页
driver.get("https://www.imooc.com")

# 查找所有课程元素
courses = driver.find_elements_by_css_selector(".course-card-container .course-card")

# 打印课程数量
print("共有{0}门课程".format(len(courses)))

# 关闭浏览器
driver.quit()

二、显式等待

显式等待是在代码中进行局部设置,就是在代码的特定位置等待某一条件出现。通过调用WebDriverWait对象的until或者until_not方法,指定需要等待的条件,如出现某个元素,然后设置最长等待时间,单位为秒。

具体实现方式为先定义一个WebDriverWait对象,然后调用expected_conditions模块中的一些预定义条件,比如element_to_be_clickable(查找元素并且该元素可被点击)等,此外,也可以自定义等待条件方法。然后通过调用这个对象的until或until_not方法来等待条件成立或者超时。

显式等待的优点是灵活性高,可以在特定的位置等待,而且可以手动设置等待条件,缺点是容易产生代码冗余。

示例1:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()

# 打开慕课网登录页面
driver.get("https://www.imooc.com/user/newlogin")

# 定义WebDriverWait对象,最长等待时间为10秒
wait = WebDriverWait(driver, 10)

# 等待页面中的登录方式出现
login_type = wait.until(EC.presence_of_element_located((By.CLASS_NAME, "js-loginTab-item.loginTab-item")))

# 点击切换登录方式按钮
login_type.click()

# 关闭浏览器
driver.quit()

示例2:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()

# 打开百度搜索页面
driver.get("https://www.baidu.com/s?ie=utf-8&wd=selenium")

# 定义WebDriverWait对象,最长等待时间为10秒
wait = WebDriverWait(driver, 10)

# 等待搜索结果元素列表出现
results = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "#content_left .result.c-container")))

# 打印搜索结果数量
print("共找到{0}个搜索结果".format(len(results)))

# 关闭浏览器
driver.quit()

三、JavaScript等待

JavaScript等待是通过执行一段JavaScript代码来等待某个条件的出现。具体实现方式为调用execute_script方法,然后在传入的JavaScript代码中实现等待条件,调用window.setTimeout方法实现等待,返回结果是一个jQuery对象。

JavaScript等待的优点是自由度高,可以通过自定义JavaScript实现各种等待条件,缺点是需要熟悉JavaScript语法。

示例1:

from selenium import webdriver

driver = webdriver.Chrome()

# 打开百度搜索页面
driver.get("https://www.baidu.com")

# 等待两秒钟
driver.execute_script("window.setTimeout(function() { return true; }, 2000);")

# 查找输入框
search_input = driver.find_element_by_id("kw")

# 输入搜索内容
search_input.send_keys("Selenium")

# 查找搜索按钮
search_button = driver.find_element_by_id("su")

# 点击搜索按钮
search_button.click()

# 关闭浏览器
driver.quit()

示例2:

from selenium import webdriver

driver = webdriver.Chrome()

# 打开慕课网首页
driver.get("https://www.imooc.com")

# 等待三秒钟
driver.execute_script("window.setTimeout(function() { return true; }, 3000);")

# 查找所有课程元素
courses = driver.find_elements_by_css_selector(".course-card-container .course-card")

# 打印课程数量
print("共有{0}门课程".format(len(courses)))

# 关闭浏览器
driver.quit()

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python selenium 三种等待方式解读 - Python技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • python3.6、opencv安装环境搭建过程(图文教程)

    当然,我很乐意为您提供“Python3.6、OpenCV安装环境搭建过程(图文教程)”的完整攻略。以下是详细的步骤和示例: Python3.6、OpenCV安装环境搭建过程(图文教程) Python3.6安装 下载Python3.6安装包 Python官网下载页面中,选择Python3.6版本的安装,下载对应操作系统的安装包。 安装Python3.6 双击下…

    python 2023年5月13日
    00
  • python3.7.2 tkinter entry框限定输入数字的操作

    在 Python 中,使用 Tkinter 库来创建 GUI 应用程序。其中,Entry 框是常用的一个控件,用于接收用户输入的数据。有时候,我们需要对 Entry 框的输入内容进行限制,比如只允许输入数字。下面就是一个完整的攻略,详细讲解如何实现 Entry 框的数字输入限制操作。 问题说明 在我们的 GUI 应用程序中,有一个 Entry 框用于接收用户…

    python 2023年6月13日
    00
  • 详解Python 字典、映射和散列表

    下面是Python 字典、映射和散列表的完整攻略。 Python字典 Python中的字典是一种无序的键值对数据结构,也称为哈希表或关联数组。它们非常适合存储和快速访问大量的相关数据。 创建字典 下面是创建Python字典的几种方法: # 空字典 d = {} # 直接通过键值对创建字典 d = {‘apple’: 2, ‘banana’: 3, ‘pear…

    python-answer 2023年3月25日
    00
  • 我想在 Simpy Python 中从 FilterStore 中获取许多项目

    【问题标题】:I want go get many items from FilterStore in Simpy Python我想在 Simpy Python 中从 FilterStore 中获取许多项目 【发布时间】:2023-04-02 13:11:01 【问题描述】: 我想从 FilterStore 中获取许多项目。 factory.stock_pa…

    Python开发 2023年4月8日
    00
  • python-opencv颜色提取分割方法

    Python-OpenCV颜色提取分割方法 简介 在进行图像处理时,颜色提取和分割是很常用的技术。本文将介绍如何使用Python以及OpenCV库进行颜色提取和分割。 基础知识 OpenCV OpenCV是一个开源计算机视觉库,包括各种图像处理和计算机视觉的函数。在Python中,OpenCV库能够与Numpy库整合,并可实现使图像变得更加易于处理的数据格式…

    python 2023年6月2日
    00
  • Python中matplotlib如何改变画图的字体

    Matplotlib是一个非常流行的数据可视化工具,Python中的matplotlib包含了许多不同的预设风格可以修改,但有时你可能需要自定义一些细节,例如改变标签的字体。下面是一些示例说明如何改变matplotlib绘制图形的字体。 1. 改变标签字体风格 Matplotlib具有对字体进行的详细控制。通过调整字体大小、颜色和类型,你可以确保你的图形清晰…

    python 2023年5月18日
    00
  • python脚本框架webpy入门安装及应用创建

    Python脚本框架web.py入门安装及应用创建完整攻略 1. 安装Web.py Web.py可以使用pip命令来安装,打开终端,输入以下命令: pip install web.py 2. 创建Web.py应用 2.1. 创建项目目录 在你喜欢的位置创建一个新目录,例如project。 mkdir project 2.2. 创建应用主文件 在项目目录中创建…

    python 2023年5月20日
    00
  • python爬取全国水雨情信息详解

    Python爬取全国水雨情信息攻略 全国水雨情信息是我们日常生活中非常重要的信息之一,使用Python可以方便地爬取全国水雨情信息。本攻略将介绍使用Python爬取全国水雨情信息的示例代码,包括数据获取、数据处理、数据存储和示例。 步骤1:获取数据 在Python中,我们可以使用requests库获取全国水雨情信息。以下是获取全国水雨情信息的示例: impo…

    python 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部