草稿selenium显示等待

本文介绍如何使用Selenium WebDriver进行网页自动化操作,通过Python脚本实现对百度图片搜索的自动化,包括打开网页、等待元素加载及输入搜索关键词。

代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait

url = 'http://image.baidu.com/'

driver = webdriver.Chrome()
driver.get(url)

# 等待对象
wait = WebDriverWait(driver, 5)
# 目标元素
ele = expected_conditions.presence_of_element_located((By.XPATH, '//*[@id="kw"]'))
# 等待目标元素的出现
obj = wait.until(ele)
# 如果没有出现报错
# raise TimeoutException(message, screen, stacktrace)
obj.send_keys('小樱')


# ipt.send_keys('火影忍者')

如果等待目标没有出来会出错

C:\ProgramData\Anaconda3\python.exe E:/百度同步盘2020/0519项目/自动赚钱版本2/v3自动下单开始/test/one.py
Traceback (most recent call last):
  File "E:/百度同步盘2020/0519项目/自动赚钱版本2/v3自动下单开始/test/one.py", line 15, in <module>
    obj = wait.until(ele)
  File "C:\ProgramData\Anaconda3\lib\site-packages\selenium\webdriver\support\wait.py", line 80, in until
    raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message: 


Process finished with exit code 1

在做 WEB 自动化时,由于代码运行速度和浏览器加载渲染速度不在一个量级,若不等待页面元素加载完成就执行操作,会报找不到元素的错误,因此需要在某些场景下添加等待时间,显示等待便是其中一种等待方式[^2]。 显示等待是指在代码中定义一个等待条件,当该条件成立时才继续执行后续代码。它通过`WebDriverWait`类和`expected_conditions`模块来实现。`WebDriverWait`类用于设置最大等待时间,`expected_conditions`模块提供了多种预置条件,用于判断元素是否满足特定状态。 以下是一个显示等待的示例代码,设置最大等待时间为 10 秒,直到指定文本在元素的值中可见: ```python from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By # 假设 driver 是已经初始化好的 WebDriver 实例 WebDriverWait(driver, timeout=10).until(EC.text_to_be_present_in_element_value((By.ID, 'frame_id'), "Expected_Title")) ``` 在上述代码中,`WebDriverWait(driver, timeout=10)`创建了一个等待对象,最大等待时间为 10 秒。`until()`方法用于等待直到满足指定的条件,这里的条件是`EC.text_to_be_present_in_element_value((By.ID, 'frame_id'), "Expected_Title")`,即指定元素(通过 ID 为`frame_id`定位)的值中包含指定的文本`Expected_Title`。 若在等待时间内元素未满足条件,会抛出相应的异常,如`selenium.common.exceptions.TimeoutException`。例如,若元素定位信息有误,会抛出`selenium.common.exceptions.NoSuchElementException`,像定位元素`[name="login_ino"]`时,就会因元素实际应该是`login_info`而抛出该异常[^3]。 `expected_conditions`模块提供了多种预置条件,如`presence_of_element_located`用于等待元素存在等,在初始化时需要传入定位信息,如`(By.ID, 'kw')`,同时需要引入`By`类[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鲸鱼编程pyhui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值