Python Selenium自动化操作详解:从入门到实战
Python Selenium自动化操作详解:从入门到实战
一、Selenium简介
Selenium是一个用于Web应用程序自动化测试的工具,支持多种浏览器和编程语言。结合Python使用,可以实现:
- 自动化表单提交
- 动态网页数据抓取
- 功能测试
- 网页交互模拟
二、环境搭建
1. 安装依赖库
pip install selenium
2. 浏览器驱动配置
浏览器 | 驱动下载地址 | 环境变量配置 |
---|---|---|
Chrome | Chromedriver | 将驱动文件放在Python安装目录或系统PATH路径 |
三、基础操作详解
1. 启动浏览器
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
# 指定驱动路径
service = Service('/path/to/chromedriver')
driver = webdriver.Chrome(service=service)
2. 网页操作
# 打开网页
driver.get("https://www.baidu.com")
# 获取当前URL
current_url = driver.current_url
# 刷新页面
driver.refresh()
# 页面标题
print(driver.title)
四、元素定位八大方法
常用定位方式
# ID定位
search_input = driver.find_element("id", "kw")
# Name定位
search = driver.find_element("name", "wd")
# XPath定位(含等待)
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.XPATH, "//input[@class='s_ipt']"))
)
# CSS选择器
submit_btn = driver.find_element(By.CSS_SELECTOR, "#su")
五、典型操作案例
案例1:百度搜索自动化
# 启动浏览器
driver = webdriver.Chrome()
try:
driver.get("https://www.baidu.com")
# 输入搜索词
search_box = driver.find_element(By.ID, "kw")
search_box.send_keys("Python Selenium教程")
# 点击搜索按钮
search_btn = driver.find_element(By.ID, "su")
search_btn.click()
# 等待结果加载
WebDriverWait(driver, 5).until(
EC.title_contains("Python Selenium教程")
)
# 截图保存
driver.save_screenshot("search_results.png")
finally:
driver.quit()
案例2:模拟登录(以知乎为例)
def zhihu_login(username, password):
driver.get("https://www.zhihu.com/signin")
# 切换至密码登录
driver.find_element(By.CLASS_NAME, "SignFlow-tab").click()
# 填写表单
driver.find_element(By.NAME, "username").send_keys(username)
driver.find_element(By.NAME, "password").send_keys(password)
# 处理验证码(需人工干预)
input("请手动完成验证码后按回车继续...")
# 提交登录
driver.find_element(By.CSS_SELECTOR, ".SignFlow-submitButton").click()
# 验证登录成功
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CLASS_NAME, "AppHeader-userAvatar"))
)
六、高级技巧
1. 执行JavaScript
# 滚动到页面底部
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
# 修改元素属性
driver.execute_script("arguments[0].style.border='3px solid red'", element)
2. 处理iframe
# 切换至iframe
iframe = driver.find_element(By.TAG_NAME, "iframe")
driver.switch_to.frame(iframe)
# 操作iframe内元素
driver.find_element(By.ID, "inner_element").click()
# 切回主文档
driver.switch_to.default_content()
七、注意事项
- 驱动版本:确保浏览器与驱动版本严格匹配
- 元素等待:使用显式等待(WebDriverWait)代替time.sleep()
- 反爬机制:合理设置操作间隔,避免触发反爬
- 资源释放:务必在结束时调用driver.quit()