文章目录
-
- 一、基础窗口控制(最常用)
- 二、页面导航操作(核心)
- 三、元素交互操作(爬虫核心)
-
- [1. 输入/点击类](#1. 输入/点击类)
- [2. 选择类(下拉框/复选框)](#2. 选择类(下拉框/复选框))
- 示例代码(元素交互)
- 四、页面数据提取操作
- 五、进阶浏览器操作(实用技巧)
-
- [1. 标签页/窗口切换](#1. 标签页/窗口切换)
- [2. 无头模式(后台运行)](#2. 无头模式(后台运行))
- [3. 禁用图片加载(提升速度)](#3. 禁用图片加载(提升速度))
Selenium 对浏览器的操作覆盖「窗口控制、页面导航、元素交互、数据提取、设置配置」五大核心场景,我会按「高频常用→进阶实用」的顺序整理,每个操作都配 代码示例+场景说明 ,新手能直接套用。
一、基础窗口控制(最常用)
这类操作主要用于调整浏览器状态,是爬虫/自动化的第一步。
| 操作功能 | 代码示例 | 适用场景 |
|---|---|---|
| 启动浏览器 | driver = webdriver.Chrome() |
初始化浏览器(默认窗口) |
| 最大化窗口 | driver.maximize_window() |
避免元素因窗口过小被遮挡 |
| 设置窗口大小 | driver.set_window_size(1920, 1080)(宽/高) |
模拟指定分辨率的浏览器 |
| 移动窗口位置 | driver.set_window_position(100, 100)(x/y坐标) |
多窗口操作时调整位置 |
| 最小化窗口 | driver.minimize_window() |
临时隐藏窗口(不关闭) |
| 关闭当前标签页 | driver.close() |
只关闭当前标签,保留浏览器 |
| 关闭整个浏览器 | driver.quit() |
结束会话(释放资源,必用) |
示例代码(窗口控制)
python
from selenium import webdriver
# 初始化Chrome浏览器
driver = webdriver.Chrome()
# 最大化窗口(优先推荐)
driver.maximize_window()
# 访问网页
driver.get('https://www.baidu.com')
# 临时调整窗口大小
driver.set_window_size(800, 600)
print(f'当前窗口大小:{driver.get_window_size()}') # 获取窗口大小
# 操作完成后关闭浏览器(关键!避免进程残留)
driver.quit()
二、页面导航操作(核心)
用于控制页面的跳转、刷新、回退/前进,模拟用户浏览行为。
| 操作功能 | 代码示例 | 说明 |
|---|---|---|
| 访问指定URL | driver.get('https://www.baidu.com') |
打开目标网页 |
| 刷新页面 | driver.refresh() |
重新加载当前页面(解决加载异常) |
| 回退到上一页 | driver.back() |
模拟浏览器左上角「后退」按钮 |
| 前进到下一页 | driver.forward() |
模拟浏览器左上角「前进」按钮 |
| 获取当前URL | current_url = driver.current_url |
验证是否跳转到目标页面 |
| 获取页面标题 | title = driver.title |
验证页面是否加载正确 |
| 设置页面加载超时 | driver.set_page_load_timeout(10)(单位:秒) |
避免页面加载过久卡住 |
示例代码(页面导航)
python
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.maximize_window()
# 访问百度
driver.get('https://www.baidu.com')
print(f'当前页面标题:{driver.title}') # 输出:百度一下,你就知道
# 输入关键词并跳转
search_box = driver.find_element('id', 'kw')
search_box.send_keys('Selenium教程')
search_box.submit() # 提交搜索(等价于按回车)
time.sleep(2)
print(f'搜索后URL:{driver.current_url}')
# 回退到百度首页
driver.back()
time.sleep(1)
# 前进到搜索结果页
driver.forward()
time.sleep(1)
# 刷新页面
driver.refresh()
driver.quit()
三、元素交互操作(爬虫核心)
这是爬取动态页面的关键,用于模拟用户点击、输入、选择等操作。
1. 输入/点击类
| 操作功能 | 代码示例 | 适用场景 |
|---|---|---|
| 输入文本 | element.send_keys('要输入的内容') |
账号/密码/搜索框输入 |
| 清空输入框 | element.clear() |
重新输入前清空原有内容 |
| 点击元素 | element.click() |
按钮、链接、复选框点击 |
| 提交表单 | element.submit() |
搜索框/登录表单提交(回车) |
| 模拟按键 | element.send_keys(Keys.ENTER)(需导入Keys) |
按回车/空格/删除等 |
2. 选择类(下拉框/复选框)
python
from selenium.webdriver.support.select import Select
# 1. 下拉框操作
select_element = driver.find_element('id', 'select_id')
select = Select(select_element)
select.select_by_index(0) # 按索引选择(从0开始)
select.select_by_value('value值') # 按value属性选择
select.select_by_visible_text('显示文本') # 按可见文本选择
# 2. 复选框/单选框
checkbox = driver.find_element('id', 'checkbox_id')
if not checkbox.is_selected(): # 判断是否已选中
checkbox.click()
示例代码(元素交互)
python
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
import time
driver = webdriver.Chrome()
driver.get('https://www.12306.cn/index/')
driver.maximize_window()
time.sleep(2) # 等待页面加载
# 1. 输入出发地/目的地
from_input = driver.find_element('id', 'fromStationText')
from_input.click()
from_input.send_keys('北京')
from_input.send_keys(Keys.ENTER) # 按回车确认
to_input = driver.find_element('id', 'toStationText')
to_input.click()
to_input.send_keys('上海')
to_input.send_keys(Keys.ENTER)
# 2. 选择日期(下拉框示例)
# 注意:12306的日期是JS渲染,此处仅演示下拉框语法
# select_date = Select(driver.find_element('id', 'date_select'))
# select_date.select_by_visible_text('2026-03-20')
# 3. 点击查询按钮
query_btn = driver.find_element('id', 'search_one')
query_btn.click()
time.sleep(3)
driver.quit()
四、页面数据提取操作
爬取数据的核心步骤,用于获取页面中的文本、属性、源码等信息。
| 操作功能 | 代码示例 | 说明 |
|---|---|---|
| 获取元素文本 | text = element.text |
提取可见文本(如标题、价格) |
| 获取元素属性 | href = element.get_attribute('href') |
提取链接、图片src、value等 |
| 获取页面源码 | page_source = driver.page_source |
获取整个页面的HTML源码 |
| 获取Cookie | cookies = driver.get_cookies() |
提取登录后的Cookie(免登录) |
| 执行JS代码 | driver.execute_script('window.scrollTo(0, document.body.scrollHeight)') |
滚动页面、修改页面元素等 |
示例代码(数据提取)
python
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://movie.douban.com/top250')
driver.maximize_window()
# 1. 提取第一个电影的名称和评分
first_movie = driver.find_element('xpath', '//div[@class="item"][1]')
title = first_movie.find_element('class name', 'title').text
score = first_movie.find_element('class name', 'rating_num').text
print(f'豆瓣Top250第一部:{title},评分:{score}')
# 2. 提取第一个电影的链接
movie_link = first_movie.find_element('tag name', 'a').get_attribute('href')
print(f'电影链接:{movie_link}')
# 3. 执行JS滚动到页面底部
driver.execute_script('window.scrollTo(0, document.body.scrollHeight)')
# 4. 获取页面Cookie(用于免登录)
cookies = driver.get_cookies()
print(f'页面Cookie数量:{len(cookies)}')
driver.quit()
五、进阶浏览器操作(实用技巧)
1. 标签页/窗口切换
python
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get('https://www.baidu.com')
# 打开新标签页
driver.execute_script('window.open("https://www.douban.com")')
time.sleep(1)
# 获取所有标签页句柄
windows = driver.window_handles
print(f'当前标签页数量:{len(windows)}')
# 切换到第二个标签页(豆瓣)
driver.switch_to.window(windows[1])
print(f'切换后页面标题:{driver.title}')
# 切回第一个标签页(百度)
driver.switch_to.window(windows[0])
print(f'切回后页面标题:{driver.title}')
driver.quit()
2. 无头模式(后台运行)
python
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
# 配置无头模式
chrome_options = Options()
chrome_options.add_argument('--headless') # 无头模式
chrome_options.add_argument('--disable-gpu') # 禁用GPU(避免报错)
chrome_options.add_argument('--window-size=1920,1080') # 设置窗口大小
# 初始化浏览器
driver = webdriver.Chrome(options=chrome_options)
driver.get('https://www.baidu.com')
print(f'无头模式下页面标题:{driver.title}')
driver.quit()
3. 禁用图片加载(提升速度)
python
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
# 禁用图片加载
prefs = {'profile.managed_default_content_settings.images': 2}
chrome_options.add_experimental_option('prefs', prefs)
driver = webdriver.Chrome(options=chrome_options)
driver.get('https://www.taobao.com')
print('禁用图片后页面加载完成')
driver.quit()