Selenium 浏览器操作
Selenium 浏览器操作全攻略(2025 最新版)
浏览器 = 你的“机器人驾驶舱”
掌握 打开、导航、窗口、标签页、截图、JS 执行 等操作,让浏览器随你操控!
一、核心浏览器操作分类
| 分类 | 操作 | 方法 |
|---|---|---|
| 基础 | 打开、关闭、刷新 | get(), quit(), refresh() |
| 导航 | 前进、后退 | back(), forward() |
| 窗口 | 最大化、尺寸、位置 | maximize_window(), set_window_size() |
| 标签页 | 新建、切换、关闭 | window_handles, switch_to.window() |
| 截图 | 全屏、元素、PDF | save_screenshot(), print_page() |
| JS 执行 | 滚动、弹窗、修改 DOM | execute_script() |
| Cookies | 添加、删除、获取 | add_cookie(), delete_all_cookies() |
二、基础操作(必会)
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
# 打开网页
driver.get("https://www.baidu.com")
# 获取标题 / URL
print("标题:", driver.title)
print("URL:", driver.current_url)
# 刷新页面
driver.refresh()
# 关闭浏览器(推荐)
driver.quit()
# 或关闭当前标签
# driver.close()
三、导航操作
driver.get("https://httpbin.org")
driver.get("https://www.baidu.com")
# 后退
driver.back() # → httpbin.org
# 前进
driver.forward() # → baidu.com
四、窗口控制
# 最大化
driver.maximize_window()
# 设置大小(适配移动端)
driver.set_window_size(375, 812) # iPhone X
# 设置位置
driver.set_window_position(0, 0)
# 获取大小
width, height = driver.get_window_size()['width'], driver.get_window_size()['height']
print(f"窗口大小: {width}x{height}")
移动端模拟:
driver.set_window_size(390, 844) # 常见手机尺寸
五、标签页 & 窗口管理(Selenium 4+)
# 打开新标签页
driver.execute_script("window.open('');")
# 或 Selenium 4 新 API
driver.switch_to.new_window('tab') # 新标签页
driver.switch_to.new_window('window') # 新窗口
# 获取所有窗口句柄
handles = driver.window_handles
print(handles) # ['CDwindow-XXX', 'CDwindow-YYY']
# 切换到第二个标签
driver.switch_to.window(handles[1])
driver.get("https://httpbin.org")
# 关闭当前标签,切回第一个
driver.close()
driver.switch_to.window(handles[0])
六、截图 & 保存页面
# 全屏截图
driver.save_screenshot("baidu_full.png")
# 元素截图
element = driver.find_element(By.ID, "kw")
element.screenshot("search_box.png")
# 获取页面源码
html = driver.page_source
with open("page.html", "w", encoding="utf-8") as f:
f.write(html)
# Selenium 4:打印为 PDF(需 headless)
options = webdriver.ChromeOptions()
options.add_argument("--headless")
options.add_argument("--print-to-pdf")
# 注意:需配合 CDP 使用
七、JavaScript 执行(最强大操作)
# 滚动到底部
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
# 滚动到元素
element = driver.find_element(By.ID, "footer")
driver.execute_script("arguments[0].scrollIntoView(true);", element)
# 修改输入框(绕过只读)
driver.execute_script("arguments[0].value = '强制输入';", element)
# 移除广告
driver.execute_script("""
var ads = document.querySelectorAll('.ad');
ads.forEach(ad => ad.remove());
""")
# 弹窗
driver.execute_script("alert('操作完成!');")
八、Cookies 管理
# 添加 Cookie(用于免登录)
driver.add_cookie({
"name": "SESSION",
"value": "abc123",
"domain": "example.com",
"path": "/"
})
# 获取所有 Cookies
cookies = driver.get_cookies()
print(cookies)
# 删除指定 Cookie
driver.delete_cookie("SESSION")
# 清空所有 Cookies
driver.delete_all_cookies()
实战:保存登录状态
import json
with open("cookies.json", "w") as f:
json.dump(driver.get_cookies(), f)
# 下次加载
with open("cookies.json") as f:
cookies = json.load(f)
for c in cookies:
driver.add_cookie(c)
driver.refresh()
九、无头模式(Headless)—— 服务器必备
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument("--headless") # 无界面
options.add_argument("--no-sandbox")
options.add_argument("--disable-dev-shm-usage")
options.add_argument("--disable-gpu")
options.add_argument("--window-size=1920,1080") # 设置窗口大小
driver = webdriver.Chrome(options=options, service=Service(ChromeDriverManager().install()))
十、完整实战:多标签页搜索 + 截图
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service
import time
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
wait = WebDriverWait(driver, 10)
try:
# 主页面
driver.get("https://www.baidu.com")
driver.maximize_window()
# 打开 3 个新标签页
sites = ["httpbin.org", "github.com", "selenium.dev"]
for site in sites:
driver.switch_to.new_window('tab')
driver.get(f"https://www.{site}")
# 回到第一个标签(百度)
driver.switch_to.window(driver.window_handles[0])
# 搜索
wait.until(EC.element_to_be_clickable((By.ID, "kw"))).send_keys("Selenium")
driver.find_element(By.ID, "su").click()
# 等待结果
wait.until(EC.title_contains("Selenium"))
# 截图
driver.save_screenshot("search_result.png")
print("所有操作完成!")
finally:
time.sleep(3)
driver.quit()
十一、常见问题 & 解决方案
| 问题 | 解决方案 |
|---|---|
window_handles 为空 | 确保已打开新窗口 |
NoSuchWindowException | 窗口已关闭,重新获取 window_handles |
| 截图黑屏(headless) | 添加 --window-size 和 --disable-gpu |
| JS 执行无效果 | 使用 arguments[0] 传递元素 |
| 页面卡住 | 设置 page_load_timeout |
driver.set_page_load_timeout(30) # 30秒超时
十二、最佳实践总结
| 原则 | 推荐 |
|---|---|
| 窗口切换 | 每次操作前 print(driver.current_window_handle) |
| 截图 | 关键步骤 + 异常时自动截图 |
| JS | 复杂交互必用 |
| Cookies | 登录状态持久化 |
| 无头 | 服务器部署标准配置 |
def safe_get(driver, url):
try:
driver.set_page_load_timeout(30)
driver.get(url)
except:
driver.save_screenshot("timeout_error.png")
raise
十三、推荐配置模板(复制即用)
def get_driver(headless=False):
from selenium.webdriver.chrome.options import Options
options = Options()
if headless:
options.add_argument("--headless")
options.add_argument("--no-sandbox")
options.add_argument("--disable-dev-shm-usage")
options.add_argument("--window-size=1920,1080")
else:
options.add_argument("--start-maximized")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)
driver.set_page_load_timeout(30)
return driver
十四、一句话总结
浏览器操作 = 打开 + 导航 + 窗口 + JS 执行 + 截图 = 全自动控制
下一步:
想看 企业级浏览器管理模板(多账号、代理、用户配置、异常重试)?
回复 browser_pro 我发你一个 生产级项目框架!
当前最佳组合:
pip install selenium webdriver-manager
WebDriverWait + execute_script + window_handles = 浏览器无敌!
现在,你已经能让浏览器“为你打工”了!