Selenium 浏览器操作

Selenium 浏览器操作全攻略(2025 最新版)

浏览器 = 你的“机器人驾驶舱”
掌握 打开、导航、窗口、标签页、截图、JS 执行 等操作,让浏览器随你操控!


一、核心浏览器操作分类

分类操作方法
基础打开、关闭、刷新get(), quit(), refresh()
导航前进、后退back(), forward()
窗口最大化、尺寸、位置maximize_window(), set_window_size()
标签页新建、切换、关闭window_handles, switch_to.window()
截图全屏、元素、PDFsave_screenshot(), print_page()
JS 执行滚动、弹窗、修改 DOMexecute_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 = 浏览器无敌!

现在,你已经能让浏览器“为你打工”了!

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注