Python Selenium 自动化入门教程|代码脚本 + Selenium IDE双方案实操
本文先完整讲解PyCharm下Python Selenium全套配置、基础/高阶API用法,搭配可运行实操案例;再演示同款需求用Selenium IDE录制实现,最后汇总两种方案使用思路。
前言

做Web UI自动化、模拟网页操作、简单爬虫时,Selenium是行业最主流工具。它有两种使用模式,大家日常都可以按需选用:
- Python手写Selenium脚本:代码可控,支持复杂业务逻辑,可分层封装、对接测试流程,适合长期自动化项目;
- Selenium IDE浏览器插件:零代码可视化录制,点点鼠标就能生成操作流程,快速复现页面操作,新手入门友好。
一、环境搭建(PyCharm适配)
1. selenium库安装
打开PyCharm底部Terminal终端,执行pip命令安装核心依赖:
# 核心自动化库 + 自动驱动管理工具
pip install selenium webdriver-manager
- selenium:提供浏览器操控全套API;
- webdriver-manager:自动识别本地Chrome版本,一键下载匹配驱动,告别版本不兼容报错。
2. 浏览器驱动两种安装方案
方案1:自动驱动(推荐新手,本文全部示例使用)
无需手动下载驱动文件,代码内部自动拉取对应版本,即装即用。
方案2:手动下载驱动(旧项目兼容场景)
针对不同的浏览器,需要安装不同的驱动。Chrome用ChromeDriver,Edge用MSEdgeDriver,Firefox用GeckoDriver,各驱动均可在对应官网获取。
这里用 ChromeDriver 安装作为演示:
-
查看本地Chrome版本:浏览器右上角设置 → 关于Chrome,记录版本号;

-
访问 ChromeDriver官方下载地址 找到对应版本压缩包;

-
解压驱动.exe文件,放置Python根目录或代码内指定驱动文件路径,并把当前路径保存到环境变量,即可全局调用驱动。
二、Selenium 基础核心用法
1. 浏览器页面基础操作
1.1 初始化浏览器对象(自动驱动极简写法)
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
# 自动匹配Chrome驱动,初始化浏览器
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
注意:如果运行时报错
TypeError: __init__() got an unexpected keyword argument 'service',说明你安装的是老版本Selenium(3.x),需要升级:pip install -U selenium
拓展:无头模式(后台运行不弹出浏览器窗口,适合批量跑任务)
from selenium.webdriver.chrome.options import Options
opt = Options()
opt.add_argument("--headless=new") # Chrome 109+ 使用新无头模式
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=opt)
1.2 访问网页地址
driver.get("https://www.baidu.com")
1.3 控制浏览器窗口尺寸
# 窗口最大化
driver.maximize_window()
# 自定义宽高
driver.set_window_size(1000, 800)
1.4 页面前进、后退、刷新
driver.back() # 后退上一页
driver.forward() # 前进下一页
driver.refresh() # 刷新当前页面
1.5 获取页面基础属性
print("页面标题:", driver.title)
print("当前URL:", driver.current_url)
print("页面源码:", driver.page_source) # 可用于调试或简单爬虫
2. 页面元素定位(四大主流定位方式)
统一导入定位枚举类:
from selenium.webdriver.common.by import By
| 定位方式 | 代码示例 | 适用场景 |
|---|---|---|
| ID定位 | driver.find_element(By.ID, "kw") |
页面唯一id属性,稳定性最高 |
| Class定位 | driver.find_element(By.CLASS_NAME, "s_ipt") |
单一class值 |
| CSS选择器 | driver.find_element(By.CSS_SELECTOR, "#kw") |
灵活适配复杂样式,语法简洁 |
| XPath定位 | driver.find_element(By.XPATH, "//input[@id='kw']") |
无id/class的复杂页面,万能但效率稍低 |
CSS选择器常用语法速查:
| 目标 | CSS写法 | 说明 |
|---|---|---|
| id为kw的元素 | #kw |
# 表示id |
| class为s_ipt的元素 | .s_ipt |
. 表示class |
| input标签 | input |
直接写标签名 |
| 子级元素 | form > input |
form下的直接子级input |
| 后代元素 | form input |
form下所有层级input |
| 属性筛选 | input[name='wd'] |
匹配name属性为wd的input |
单数与复数定位:
# 定位单个元素(找不到抛异常)
driver.find_element(By.ID, "kw")
# 定位多个元素(找不到返回空列表,不抛异常)
driver.find_elements(By.CLASS_NAME, "result-item")
3. 模拟鼠标操作
需要导入鼠标动作链:
from selenium.webdriver import ActionChains
action = ActionChains(driver)
elem = driver.find_element(By.ID, "su")
action.click(elem).perform() # 单击
action.double_click(elem).perform() # 双击
action.context_click(elem).perform() # 右键
action.move_to_element(elem).perform() # 鼠标悬浮
4. 模拟键盘输入操作
导入键盘按键包:
from selenium.webdriver.common.keys import Keys
search_input = driver.find_element(By.ID, "kw")
search_input.send_keys("Selenium教程") # 输入文字
search_input.send_keys(Keys.ENTER) # 回车
search_input.send_keys(Keys.CONTROL, "a") # Ctrl+A全选
search_input.send_keys(Keys.BACKSPACE) # 删除
5. 三种延时等待(解决元素加载未完成报错)
5.1 强制等待(不推荐,仅调试用)
固定休眠时间,不管页面是否加载完成,浪费执行时间:
import time
time.sleep(3)
5.2 隐式等待(全局通用)
设置全局等待时长,查找所有元素时最多等待指定秒数,找到立刻执行:
driver.implicitly_wait(10)
5.3 显式等待(企业项目首选,精准高效)
单独等待某一个指定元素,精准控制加载时机,速度更快:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 最多等待10秒,直到搜索框出现
input_elem = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "kw"))
)
6. 页面切换操作
6.1 多窗口切换
打开新标签页后,通过窗口句柄切换页面:
# 获取所有窗口句柄
windows = driver.window_handles
# 切换到第二个新窗口
driver.switch_to.window(windows[1])
# 切回第一个窗口
driver.switch_to.window(windows[0])
6.2 iframe表单切换
页面内嵌iframe时,必须切入框架才能定位内部元素:
# 根据id/name切入iframe
driver.switch_to.frame("iframeId")
# 通过元素对象切入
frame_elem = driver.find_element(By.CSS_SELECTOR, "iframe")
driver.switch_to.frame(frame_elem)
# 切回原页面
driver.switch_to.default_content()
7. Cookie操作
# 获取全部cookie
cookies = driver.get_cookies()
# 添加自定义cookie
driver.add_cookie({"name": "test", "value": "123"})
# 删除单条cookie
driver.delete_cookie("test")
# 清空所有cookie
driver.delete_all_cookies()
三、Selenium 高阶实用技巧
1. execute_script 执行JS脚本
1.1 判断页面元素是否存在
def element_exist(driver, xpath):
return driver.execute_script(
'return document.evaluate("{}", document, null, '
'XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue != null'.format(xpath)
)
1.2 滚动页面到最底部
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
1.3 滚动至指定元素位置
target = driver.find_element(By.ID, "su")
driver.execute_script("arguments[0].scrollIntoView();", target)
1.4 获取页面滚动高度(判断是否到底)
scroll_height = driver.execute_script("return document.body.scrollHeight")
current_scroll = driver.execute_script("return window.pageYOffset")
2. XPath高级定位方案
2.1 文本精准定位
driver.find_element(By.XPATH, "//a[text()='百度首页']")
2.2 模糊文本匹配
# 包含指定文字
driver.find_element(By.XPATH, "//div[contains(text(), '搜索')]")
# 属性值包含指定内容
driver.find_element(By.XPATH, "//input[contains(@class, 'ipt')]")
2.3 多条件逻辑定位
# id=kw 且 class=s_ipt
driver.find_element(By.XPATH, "//input[@id='kw' and @class='s_ipt']")
# 多个条件用or
driver.find_element(By.XPATH, "//input[@id='kw' or @name='wd']")
2.4 轴定位(父子/兄弟节点)
# 父节点下的第一个子input(注意:child::是默认轴,可省略)
driver.find_element(By.XPATH, "//form/child::input[1]")
# 简写形式等价
driver.find_element(By.XPATH, "//form/input[1]")
# 获取当前节点的父节点
driver.find_element(By.XPATH, "//input[@id='kw']/parent::form")
# 获取前一个兄弟节点
driver.find_element(By.XPATH, "//input[@id='kw']/preceding-sibling::div")
# 获取后一个兄弟节点
driver.find_element(By.XPATH, "//input[@id='kw']/following-sibling::span")
四、完整综合实操案例:百度搜索自动化
完整可运行代码
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys
from webdriver_manager.chrome import ChromeDriverManager
import time
import traceback
options = Options()
options.add_argument("--disable-gpu")
options.add_argument("--no-sandbox")
options.add_argument("--disable-dev-shm-usage")
options.add_argument("--window-size=1920,1080")
options.add_argument("--disable-blink-features=AutomationControlled")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option("useAutomationExtension", False)
service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service, options=options)
driver.implicitly_wait(8)
driver.maximize_window()
driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})")
try:
driver.get("https://www.baidu.com")
print("当前页面标题:", driver.title)
time.sleep(3)
# 在AI搜索框中输入内容(使用对应的textarea)
ai_search_input = driver.find_element(By.ID, "chat-textarea")
ai_search_input.clear()
ai_search_input.send_keys("Python Selenium自动化教程")
print("已向AI搜索框输入关键词")
time.sleep(0.5)
# 点击AI搜索框旁的“百度一下”按钮
ai_search_btn = driver.find_element(By.ID, "chat-submit-button")
ai_search_btn.click()
print("已点击AI搜索按钮")
# 等待搜索结果加载
time.sleep(3)
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
print("已滚动至页面底部")
# ===== 添加暂停,让你查看搜索结果 =====
print("\n" + "="*50)
print("搜索结果已加载完成,浏览器保持打开状态。")
print("请查看搜索结果,完成后按 Enter 键关闭浏览器...")
print("="*50)
input() # 等待用户按回车键
except Exception as err:
print("脚本执行异常:", err)
traceback.print_exc()
finally:
# 关闭浏览器,释放进程
driver.quit()
print("浏览器已关闭。")
运行效果
- 自动弹出Chrome浏览器并打开百度首页;
- 在AI搜索框中输入关键词"Python Selenium自动化教程",点击"百度一下"按钮执行搜索;
- 等待3秒后自动滚动页面至底部;
- 程序暂停,浏览器保持打开,按 Enter 键 后自动关闭浏览器,无残留进程。
五、零代码替代方案:Selenium IDE录制同款百度搜索
前面我们用Python代码完成了自动化流程,不想写代码的小伙伴可以使用Selenium IDE插件快速实现一模一样的操作:
1. 前置准备
Chrome/Edge浏览器应用商店搜索安装官方 Selenium IDE 插件。
2. 录制完整步骤
-
打开插件,点击「录制新测试」,填写用例名称,默认网址填
https://www.baidu.com;
-
点击红色录制按钮,自动打开百度页面;
-
手动在搜索框输入
Python Selenium自动化教程,按下回车; -
页面加载完成后,滚动页面到底部,完成操作后停止录制;
3. 回放与导出
-
点击播放按钮,自动复现全部操作流程;

-
支持导出Python脚本(或其他语言),导出后可复制到PyCharm中二次修改优化。
注意:Selenium IDE导出的Python脚本通常包含
time.sleep()固定等待,且用的是老式find_element_by_*语法。如果要在新版Selenium 4.x中运行,需要将定位改为By.xxx格式,并建议将强制等待替换为显式等待,否则脚本稳定性会打折扣。
六、全文总结
- Python Selenium脚本:功能全面,支持等待、JS执行、复杂逻辑、批量任务,适合长期维护自动化测试、爬虫场景,是企业主流方案;
- Selenium IDE工具:零代码可视化录制,上手成本极低,适合临时验证页面、快速复现bug、新手熟悉自动化流程;
- 学习建议:新手先用IDE看懂自动化执行逻辑,再系统学习Python Selenium基础+高阶API,两种方案结合使用效率最高;
- 避坑要点:
- 优先使用显式等待 + 隐式等待兜底,少用
time.sleep() - 定位优先用ID和CSS,XPath做兜底
- 生产环境务必用
try-finally或with确保driver.quit()被执行 - Selenium 4.x 已废弃
find_element_by_*系列方法,统一使用find_element(By.xxx, value)
- 优先使用显式等待 + 隐式等待兜底,少用
参考
更多推荐



所有评论(0)