当前位置: 首页 > news >正文

Python Selenium自动化操作详解:从入门到实战

Python Selenium自动化操作详解:从入门到实战


一、Selenium简介

Selenium是一个用于Web应用程序自动化测试的工具,支持多种浏览器和编程语言。结合Python使用,可以实现:

  • 自动化表单提交
  • 动态网页数据抓取
  • 功能测试
  • 网页交互模拟

二、环境搭建

1. 安装依赖库

pip install selenium

2. 浏览器驱动配置

浏览器驱动下载地址环境变量配置
ChromeChromedriver将驱动文件放在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()

七、注意事项

  1. 驱动版本:确保浏览器与驱动版本严格匹配
  2. 元素等待:使用显式等待(WebDriverWait)代替time.sleep()
  3. 反爬机制:合理设置操作间隔,避免触发反爬
  4. 资源释放:务必在结束时调用driver.quit()

相关文章:

  • JavaScript中的函数基础知识
  • win10本地部署deepseek-r1步骤
  • 用户的声音 | 文档结构化信息提取方案测评:LLM、开源模型部署与云端API,谁是合适选择?
  • 在 Vue 项目中,为什么要在列表组件中写 key,其作用是什么?
  • 什么是幂等性?
  • 【SpringMVC】Controller的多种方式接收请求参数
  • DeepSeek模型快速部署教程-搭建自己的DeepSeek
  • 在Unity中用简单工厂模式模拟原神中的元素反应
  • DeepSeek服务器繁忙 多种方式继续优雅的使用它
  • MySQL 的存储引擎有哪些?它们之间有什么区别? MySQL InnoDB 引擎中的聚簇索引和非聚簇索引有什么区别? MySQL 的索引类型有哪些?
  • 框架篇 - Hearth ArcGIS 框架扩展(DryIoC、Options、Nlog...)
  • XCP协议
  • 【刷题】leetcode
  • var、let、const区别
  • 项目中分库分表的分布式ID如何生成
  • 数据结构与算法-搜索-bfs(floodfill and 最短路):池塘计数,城堡问题,山峰和山谷,迷宫问题,武士分度的牛,抓住那头牛
  • 深入理解 QObject的作用
  • 【JavaEE进阶】#{}和${}
  • 【Pandas】pandas Series reindex_like
  • Casbin 权限管理介绍及在 Go 语言中的使用入门
  • 城管给商户培训英语、政银企合作纾困,上海街镇这样优化营商环境
  • 花20万骑自行车?CityRide带火“骑行经济”
  • 呼和浩特65户业主被一房两卖,十年诉讼却难胜
  • “五一”假期银联、网联共处理支付交易234.39亿笔
  • 中标多家学校采购项目的App查成绩需付费?涉事公司回应
  • 韩国总统选举民调:共同民主党前党首李在明支持率超46%