Python Selenium 完全指南
编程小白的自动化浏览器操作手册
本指南用通俗易懂的语言介绍Selenium的核心概念和用法,包含大量实际代码示例和注意事项,即使你没有任何编程基础也能快速上手!
什么是Selenium?
基本概念
- Selenium是一个自动化操作浏览器的工具包
- 最初设计用于Web应用测试,现在广泛用于爬虫和自动化任务
- 支持多种浏览器:Chrome, Firefox, Edge, Safari等
- 提供多种语言接口:Python, Java, C#, JavaScript等
工作原理
Selenium通过浏览器驱动程序与真实浏览器通信:
- 你的Python代码发送指令
- Selenium驱动接收指令
- 驱动程序控制真实浏览器执行操作
- 执行结果返回给你的代码
小贴士: 你可以把Selenium想象成”浏览器遥控器”,通过Python代码来”遥控”真实的浏览器。
安装与配置
安装步骤
- 安装Selenium库: 在命令行输入
pip install selenium
- 下载浏览器驱动:
- Chrome: Chromedriver
- Firefox: Geckodriver
- Edge: Microsoft Edge Driver
- 配置驱动路径: 将驱动程序放在系统PATH路径或代码指定位置
基础启动代码
from selenium import webdriver
# 启动Chrome浏览器
driver = webdriver.Chrome()
# 打开网页
driver.get(“https://www.example.com”)
# 关闭浏览器
driver.quit()
# 启动Chrome浏览器
driver = webdriver.Chrome()
# 打开网页
driver.get(“https://www.example.com”)
# 关闭浏览器
driver.quit()
注意: 驱动程序版本必须与浏览器版本匹配,否则无法运行!
元素定位方法
定位元素就像在网页上”找人”,Selenium提供了多种方式:
八大定位方法
- ID定位:通过HTML元素的id属性
- Name定位:通过name属性
- Class定位:通过class属性
- 标签名定位:直接使用HTML标签名
- 链接文本定位:针对超链接文字
- 部分链接文本:链接文字的一部分
- CSS选择器:强大的CSS样式选择语法
- XPath:类似文件路径的定位语法
代码示例
# 通过ID定位
element = driver.find_element(“id”, “username”)
# 通过CSS定位
button = driver.find_element(“css selector”, “button.submit”)
# 通过XPath定位
link = driver.find_element(“xpath”, “//a[@class=’menu’]”)
element = driver.find_element(“id”, “username”)
# 通过CSS定位
button = driver.find_element(“css selector”, “button.submit”)
# 通过XPath定位
link = driver.find_element(“xpath”, “//a[@class=’menu’]”)
建议: 优先使用ID和CSS选择器定位,简洁高效。XPath功能强大但速度稍慢。
元素操作指南
找到元素后,你可以像真人一样操作它们:
常用操作
- 输入文本: element.send_keys(“文本内容”)
- 点击元素: element.click()
- 清除内容: element.clear()
- 获取文本: element.text
- 获取属性: element.get_attribute(“属性名”)
- 判断是否可见: element.is_displayed()
- 判断是否可操作: element.is_enabled()
模拟登录示例
# 定位用户名输入框并输入
username = driver.find_element(“id”, “username”)
username.send_keys(“myusername”)
# 定位密码框并输入
password = driver.find_element(“name”, “password”)
password.send_keys(“mypassword123”)
# 定位并点击登录按钮
login_btn = driver.find_element(“css selector”, “#login-button”)
login_btn.click()
username = driver.find_element(“id”, “username”)
username.send_keys(“myusername”)
# 定位密码框并输入
password = driver.find_element(“name”, “password”)
password.send_keys(“mypassword123”)
# 定位并点击登录按钮
login_btn = driver.find_element(“css selector”, “#login-button”)
login_btn.click()
重要: 操作前务必确保元素已加载完成,否则会报错!
等待机制
网页加载需要时间,聪明地等待元素出现是成功的关键:
三种等待方式
- 强制等待: time.sleep(秒数) – 简单但不推荐
- 隐式等待: driver.implicitly_wait(秒数) – 全局等待
- 显式等待: WebDriverWait配合条件 – 精准高效
显式等待示例
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 等待最多10秒直到元素出现
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, “dynamic-element”))
)
# 等待元素可点击
button = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.CLASS_NAME, “submit-btn”))
)
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 等待最多10秒直到元素出现
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, “dynamic-element”))
)
# 等待元素可点击
button = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.CLASS_NAME, “submit-btn”))
)
最佳实践: 在实际项目中,显式等待是首选方法,它更智能高效!
浏览器操作技巧
常用浏览器控制
- 打开网页: driver.get(“URL”)
- 前进后退: driver.forward() / driver.back()
- 刷新页面: driver.refresh()
- 关闭窗口: driver.close()
- 退出浏览器: driver.quit()
- 窗口最大化: driver.maximize_window()
- 设置窗口大小: driver.set_window_size(宽, 高)
- 获取页面标题: driver.title
- 获取当前URL: driver.current_url
多窗口/标签页处理
# 获取当前窗口句柄
main_window = driver.current_window_handle
# 打开新标签页
driver.execute_script(“window.open(”);”)
# 切换到新标签页
for handle in driver.window_handles:
if handle != main_window:
driver.switch_to.window(handle)
break
# 切回原标签页
driver.switch_to.window(main_window)
main_window = driver.current_window_handle
# 打开新标签页
driver.execute_script(“window.open(”);”)
# 切换到新标签页
for handle in driver.window_handles:
if handle != main_window:
driver.switch_to.window(handle)
break
# 切回原标签页
driver.switch_to.window(main_window)
注意: 操作完成后务必使用driver.quit()关闭所有窗口和驱动进程!
截图与JavaScript
页面截图
保存当前可视区域为图片文件:
# 保存截图
driver.save_screenshot(“screenshot.png”)
# 指定元素截图
element = driver.find_element(“id”, “header”)
element.screenshot(“header.png”)
driver.save_screenshot(“screenshot.png”)
# 指定元素截图
element = driver.find_element(“id”, “header”)
element.screenshot(“header.png”)
执行JavaScript
执行任意JavaScript代码扩展功能:
# 滚动到页面底部
driver.execute_script(“window.scrollTo(0, document.body.scrollHeight);”)
# 修改元素样式
driver.execute_script(“arguments[0].style.border = ‘3px solid red’;”, element)
# 获取页面标题
title = driver.execute_script(“return document.title;”)
driver.execute_script(“window.scrollTo(0, document.body.scrollHeight);”)
# 修改元素样式
driver.execute_script(“arguments[0].style.border = ‘3px solid red’;”, element)
# 获取页面标题
title = driver.execute_script(“return document.title;”)
提示: 当Selenium内置方法无法实现某些复杂操作时,JavaScript是你的好帮手!
实战注意事项
新手常见问题
- 元素定位失败:检查元素是否在iframe中
- 浏览器版本不匹配:确保驱动版本与浏览器匹配
- 等待时间不足:增加显式等待时间
- 页面未完全加载:添加等待或检查网络请求
- 浏览器被检测:添加反检测选项
高级技巧
- 无头模式:不显示浏览器界面
- 用户代理设置:模拟不同设备访问
- 绕过验证码:使用第三方服务或手动处理
- 反反爬虫:模拟人类行为模式
无头浏览器配置
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument(“–headless”) # 启用无头模式
chrome_options.add_argument(“–disable-gpu”)
chrome_options.add_argument(“–window-size=1920,1080”)
driver = webdriver.Chrome(options=chrome_options)
chrome_options = Options()
chrome_options.add_argument(“–headless”) # 启用无头模式
chrome_options.add_argument(“–disable-gpu”)
chrome_options.add_argument(“–window-size=1920,1080”)
driver = webdriver.Chrome(options=chrome_options)
🌐
🔥
🚀
💻
🔍