Python selenium 三种等待方式解读

当使用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日

相关文章

  • python实现粒子群算法

    Python实现粒子群算法 粒子群算法(Particle Swarm Optimization,PSO)是一种基于群体智能的优化算法,可以用于解决各种优化问题。在Python中,可以使用numpy和matplotlib库实现粒子算法。本文将详细讲解实现粒子群算法的整个攻略,包括算法原理、实现过程和示例。 算法原理 粒子群算法是一种基于群体智能的优化算法,其基…

    python 2023年5月14日
    00
  • Python 爬取微博热搜页面

    下面是“Python 爬取微博热搜页面”的完整攻略: 1. 前置准备 在开始爬取微博热搜页面之前,我们需要进行以下几个前置准备: 1.1 安装 Python 由于我们使用 Python 进行爬虫开发,所以需要在电脑上安装 Python 环境。建议采用 Python3 版本,你可以从官网下载安装包进行安装。 1.2 安装 requests 库 requests…

    python 2023年6月3日
    00
  • python实现pptx批量向PPT中插入图片

    当你需要向 PPT 中插入大量图片时,手动操作会非常繁琐,因此你可以使用 Python 的库 python-pptx 实现自动化批量插入图片。下面是具体的实现方法: 1. 安装 python-pptx 首先,在命令行下输入以下命令来安装 python-pptx: pip install python-pptx 2. 导入必要的库 在 Python 代码开头,…

    python 2023年6月3日
    00
  • python merge、concat合并数据集的实例讲解

    Python中的Merge和Concat操作 在Python中,我们可以使用pandas库中的merge()和concat()函数来合并数据集,这两个函数在数据处理中非常有用,可以帮助我们处理不同条件下的数据合并问题。 Merge 什么是Merge 在数据分析中,我们常常需要合并两个不同的表格。在数据库中,这是通过join操作实现的。在pandas中,我们可…

    python 2023年6月6日
    00
  • 教你使用python实现微信每天给女朋友说晚安

    下面详细讲解一下“教你使用python实现微信每天给女朋友说晚安”的完整攻略: 1.准备工作 在开始实现之前,首先需要准备以下工作: Windows或MacOS操作系统 Python 3.x环境 Python第三方库(itchat、APScheduler、pycryptodome) 2.登录微信 使用itchat库登录微信,代码示例如下: import it…

    python 2023年6月5日
    00
  • 使用Python写一个量化股票提醒系统

    请看下面的攻略。 使用Python写一个量化股票提醒系统 目的 准备工作 基本思路 代码实现 目的 本文的目的是介绍如何使用Python编写一个量化股票提醒系统,可以实现根据股票价格涨跌幅度提醒用户,以及灵活的设置提醒条件。 准备工作 在开始编写代码之前,需要完成以下准备工作: 安装Python环境,推荐使用Python 3.x版本。 安装tushare库,…

    python 2023年5月30日
    00
  • 浅谈python中对于json写入txt文件的编码问题

    在本攻略中,我们将讨论Python中对于JSON写入txt文件的编码问题。我们将介绍如何正确地处理编码问题,以确保JSON数据能够正确地写入txt文件。 以下是完整攻略包括两个示例。 步骤1:了解编码问题 在Python中,JSON数据可以使用json库进行编码和解码。当我们将JSON数据写入txt文件时,我们需要考虑编码问题。如果我们不正确地处理编码问题,…

    python 2023年5月15日
    00
  • python BeautifulSoup设置页面编码的方法

    Python BeautifulSoup设置页面编码的方法 在使用Python和BeautifulSoup库解析网页时,有时会遇到编码问题。如果网页的编码与Python默认编码不同,那么我们需要设置页面编码,以确保正确解析网页。在本文中,我们将介绍如何使用Python和BeautifulSoup库设置页面编码。我们将提供两个示例,演示如何设置UTF-8编码和…

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