前言
环境: win10 python3.10 selenium4.12
经常用selenium来实现一个打开网页的这样一个小功能,虽然代码很少,但每次重0开始写就很烦。所以这里记录下一个模板
小模板
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from loguru import logger
# 使用selenium打开网页的最小代码结构模板
# selenium 版本4.21
# 设置chrome选项
chrome_options = Options()
chrome_options.add_argument("--start-maximized") #最大化窗口
# 配置自动下载合适版本的webdriver驱动
service = Service(ChromeDriverManager().install())
"""
# 不自动下载,手动设置webdriver路径,以chromediver为例
chromedriver_path = r"E:\xxxxx\chromedriver.exe" # 这里替换为你下载的webdriver的路径
service = Service(chromedriver_path)
"""
try:
#第一层的try语句主要是防止webdiver打开浏览器出错,如驱动不匹配或未找到出现的异常
driver = webdriver.Chrome(service=service, options=chrome_options)
try:
#第二层的try语句作用是,在成功打开浏览器后,若出现其它异常,能确保关闭浏览器
# 打开目标网站 这里以百度首页为例
driver.get('https://www.baidu.com/')
# 以下是一些selenium的使用示例
try:
# 设置显示等待来等待指定元素,最长等待时间7s
#未在规定时间内满足指定的等待条件,则抛出异常TimeoutException
wait = WebDriverWait(driver, 7)
# 通过id的定位方式等待百度输入框的出现
wait.until(EC.presence_of_element_located((By.ID, "kw")))
# 通过id的定位方式等待百度一下按钮的出现
wait.until(EC.presence_of_element_located((By.ID, "su")))
except TimeoutException as e:
logger.info(f'未在规定时间内满足指定的等待条件: {e}')
raise
except Exception as e:
logger.info(f'等待中出现其它异常: {e}')
raise
# 百度首页输入框
input = driver.find_element(By.ID, 'kw')
# 输入框输入文本数据
input.send_keys("1")
#百度首页 百度一下 按钮
baidu_buton = driver.find_element(By.ID, "su")
# 点击按钮
baidu_buton.click()
# 强制等待多少时间
time.sleep(2)
except Exception as e:
logger.info(f"发生异常 稍后关闭浏览器: {e}")
raise
finally:
#关闭浏览器
driver.quit()
except Exception as e:
logger.info(f"webdiver打开浏览器前发生异常: {e}")
raise
关于显示等待和隐式等待
# 显示等待的例子,用其来等待元素加载,针对于特定的元素起作用
#如果未在规定的最长等待时间内满足指定的等待条件,则会抛出异常TimeoutException
## 最长等待时间10s
wait = WebDriverWait(driver, 10)
## 等待条件-等待元素出现在DOM中
wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'xxxx')))
## 等待条件-等待元素可点击
wait.until(EC.element_to_be_clickable((By.ID, "xxxx")))
## 等待条件-等待元素中的文本出现
wait.until(EC.text_to_be_present_in_element((By.ID, "xxxx"), "expected_text"))
# 隐式等待的例子
##设置隐式等待时间为10秒,它在整个webdriver实例生命周期内起作用(也就是webdriver成功打开浏览器后到 浏览器关闭期间)
##期间在查找每一个元素时都自动受到该等待设置的影响
driver.implicitly_wait(10)
"""
在实际项目中,你可以综合使用隐式等待和显示等待。隐式等待可以作为全局默认的等待机制
而显示等待可以用于处理特定的复杂场景
"""
#强制等待多少时间
time.sleep(2)
标签:webdriver,网页,driver,selenium,import,等待,模板,wait
From: https://www.cnblogs.com/MyRecords/p/18336328