快速、准确:选择和正确使用Selenium等待方法

比较Selenium中的等待方法'Time.sleep()', 'Implicit Wait', 'Explicitly Wait'的优缺点。应该使用哪种方法?

4,285
快速、准确:选择和正确使用Selenium等待方法
目录

0. 概述

当使用Selenium自动化浏览器交互时,经常会遇到需要等待元素变为可用或满足特定条件的情况。

Selenium的等待方法有'Time.sleep()' 'Implicit Wait' 'Explicitly Wait'

但应该选择哪种呢?

我们将通过各自的优缺点详细比较这三种方法的区别。

1. Time.sleep()

这是引入固定延迟到脚本中的Python默认方法。调用time.sleep(秒)会导致整个脚本在指定的秒数内暂停执行。

1.1. Time.sleep()的优点

  • 使用简单,无需设置。

  • 可以精确了解脚本等待的时间。

1.2. Time.sleep()的缺点

  • 大多数情况下,固定延迟可能比所需时间长,导致测试执行时间延长。

  • 如果等待的任务在睡眠时间之前完成,测试可能会失败。

2. Implicit Wait

from selenium import webdriver

driver = webdriver.Chrome()
driver.implicitly_wait(10)  # WebDriver will wait for up to 10 seconds for an element to appear
driver.get('<https://example.com>')
element = driver.find_element_by_id('some-id')

요소가 웹 페이지에 나타나지 않는 경우 "해당 요소 예외 없음"을 발생시키기 전에 지정된 시간 동안 기다리도록 Selenium WebDriver에 지시합니다.

2.1. Implicit Wait的优点:

  • WebDriver不会等待整个时间,一旦元素更早可用,就会立即使用。

  • 比使用time.sleep()更快。

  • 适用于整个WebDriver会话。

2.2. Implicit Wait的缺点

  • 由于无法确定Implicit Wait实际等待多长时间才会进行下一步,因此可能会增加调试的难度。

  • 将Implicit Wait和Explicitly Wait混合使用可能导致不可预测的等待时间。

3. Explicitly Wait

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://example.com>')

# Waiting for up to 10 seconds until an element with the specified ID becomes visible
element = WebDriverWait(driver, 10).until(
    EC.visibility_of_element_located((By.ID, 'some-id'))
)

3.1. Explicitly Wait的优点

  • 可以指定各种条件,不仅仅是元素的存在。例如,等待元素可点击、显示或特定文本出现。

  • 不是应用于整个WebDriver会话,可以根据操作和需求为不同元素定义不同的等待。

  • 不会不必要地延长测试时间。一旦条件满足,脚本就会继续执行。

  • 提供更好的错误消息,有助于更容易理解测试失败的原因。

3.2. Explicitly Wait的缺点

  • 需要根据需要设置等待条件,与Implicit Wait不同。

  • 仅适用于处理通过AJAX或不同时间间隔加载的Web元素的情况。

4. 结论:根据情况选择合适的等待方法。

Implicit Wait类似于在设定的时间内投放广泛的渔网以确保所有元素都可用,但Explicitly Wait则类似于使用钓竿钓取特定条件下的特定元素。

实际上,最好不要混合使用Implicit Wait和Explicitly Wait。如果随意混合使用,可能会导致不可预测的行为。

通常,对于复杂的Web应用程序环境,更喜欢可以进行详细控制的Explicitly Wait。

请参考以上内容,希望您能在适当的地方充分利用这些功能。

也一起阅读:

数据收集,现在自动化吧

无需编码,5分钟即可开始 · 5000多个网站爬取经验

免费开始 →

评论

发表评论

您的邮箱不会公开,仅用于回复通知。

继续阅读

Get notified of new posts

We'll email you when 해시스크래퍼 기술 블로그 publishes new content.

Your email will only be used for new post notifications.