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

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

8
快速、准确:选择和正确使用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多个网站爬取经验

免费开始 →

Comments

Add Comment

Your email won't be published and will only be used for reply notifications.

继续阅读

Get notified of new posts

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

Your email will only be used for new post notifications.