selenium——浏览器基础操作(启动/访问/窗口控制)

浏览器操作是Selenium自动化的起点,涵盖「启动配置、网页访问、窗口调整、关闭清理」四大核心,是所有后续操作的基础。需重点掌握「不自动关闭浏览器」「窗口最大化」等避坑配置。

1. 安装依赖→确认浏览器版本;

前一篇文章中已完成

2.导入库→配置浏览器选项;

导入 Selenium 中控制浏览器的核心模块,相当于「告诉 Python:我要开始操作浏览器了」

复制代码
# 导入Selenium中控制Edge浏览器的模块
from selenium import webdriver

# (可选)导入驱动管理库,用于自动匹配Edge驱动版本
from selenium.webdriver.edge.service import Service
from webdriver_manager.microsoft import EdgeChromiumDriverManager

# (可选)导入时间库,用于临时暂停脚本(比如观察效果)
import time

webdriver是 Selenium 的核心模块,不同浏览器对应不同的子模块(Edge 用webdriver.Edge(),Chrome 用webdriver.Chrome());

3.配置浏览器选项

提前设置浏览器的运行规则(比如不自动关闭、最大化窗口),避免后续操作触发「元素被遮挡」「浏览器闪退」等问题。

复制代码
# 第一步:初始化Chrome的选项对象(创建「配置模板」)
chrome_options = webdriver.ChromeOptions()

# 第二步:核心配置------浏览器不自动关闭(新手必加!)
# 原理:让Chrome进程与Python脚本分离,脚本结束后浏览器仍保留
chrome_options.add_experimental_option("detach", True)

# 第三步:可选配置------禁用自动化提示条
# 效果:去掉Chrome上方「Chrome正受到自动测试软件控制」的黄色提示条
chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])

# 第四步:可选配置------禁用无关日志(让控制台更干净)
# 效果:只输出严重错误,忽略警告/信息类日志,避免刷屏
chrome_options.add_argument("--log-level=3")

# 第五步:可选配置------启动即最大化窗口(提前规避元素遮挡)
# 也可后续用driver.maximize_window(),二选一即可
chrome_options.add_argument("--start-maximized")
  • 每个add_experimental_option()/add_argument()都是单独的配置,可根据需求增删;
  • 配置需在「启动浏览器」前完成,启动后再配置无效。
4.启动浏览器
方式A:基础启动(需手动配置驱动)

直接启动 Chrome,适合已手动将 Chrome 驱动添加到系统环境变量的场景。

复制代码
# 将步骤3的配置传入,启动Chrome
driver = webdriver.Chrome(options=chrome_options)

执行后会弹出 Chrome 空白窗口,无报错则启动成功;若提示「找不到 chromedriver」,说明驱动未配置环境变量,需改用方式 B。

方式 B:自动匹配驱动启动

通过webdriver-manager自动下载、匹配对应版本的 Chrome 驱动,彻底解决「驱动版本不匹配」「找不到驱动」问题。

复制代码
# 自动下载匹配Chrome版本的驱动,并启动浏览器
driver = webdriver.Chrome(
    service=Service(ChromeDriverManager().install()),  # 自动安装/匹配驱动
    options=chrome_options  # 传入步骤3的配置
)
  • 首次运行会下载驱动(耗时几秒,控制台会显示下载进度);
  • 下载完成后弹出 Chrome 空白窗口,无报错则成功;
  • 后续运行会复用已下载的驱动,无需重复下载。
5.访问网页
复制代码
from selenium import webdriver
 
# 初始化Chrome浏览器
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")

URL 格式必须规范:不能只写www.baidu.com,必须带https://(推荐)或http://,否则触发「invalid argument」错误;
driver.get()执行后,会等待页面「初步加载完成」(但动态元素可能还在加载,后续操作需配合等待)。

6.获取页面基础信息

确认浏览器是否成功打开目标网页,避免【访问错地址】

复制代码
from selenium import webdriver
 
# 初始化Chrome浏览器
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")

# 获取页面标题(百度的标题是「百度一下,你就知道」)
page_title = driver.title
print(f"✅ 当前页面标题:{page_title}")  # 预期输出:百度一下,你就知道

# 获取当前页面的URL(验证是否是目标地址)
current_url = driver.current_url
print(f"✅ 当前页面URL:{current_url}")  # 预期输出:https://www.baidu.com/
7.Chrome 窗口控制

调整窗口的大小、位置,或执行刷新 / 后退 / 前进,适配不同操作场景(比如窗口太小导致元素被遮挡)。

7.1 最大化窗口
复制代码
# 将浏览器窗口最大化(覆盖整个屏幕)
driver.maximize_window()
print("🔍 窗口已最大化")
  • 关键作用:避免因窗口过小导致搜索框 / 按钮被侧边栏遮挡,后续操作触发「元素不可交互」错误。
7.2 调整窗口位置

(移动到屏幕指定坐标)

复制代码
# 设置窗口左上角的坐标(x=1100,y=20),单位:像素
# x:距离屏幕左侧的距离,y:距离屏幕顶部的距离
driver.set_window_position(1100, 20)
print("📍 窗口已移动到指定位置")
7.3 调整窗口大小(设置宽高)
复制代码
# 设置窗口宽度900px,高度900px
driver.set_window_size(900, 900)
print("📏 窗口大小已调整为900x900")
  • 若先执行了maximize_window(),再执行set_window_size()会覆盖最大化效果,窗口变为指定大小。
7.4 刷新页面(模拟 F5 按键)
复制代码
# 刷新当前打开的百度页面
driver.refresh()
print("🔄 百度页面已刷新")
7.5 后退 / 前进(模拟浏览器的后退 / 前进按钮)
复制代码
# 先访问一个新页面(比如CSDN),才能演示后退/前进
driver.get("https://www.csdn.net/")
print(f"📌 跳转到新页面:{driver.title}")

# 后退到上一个页面(百度)
driver.back()
print(f"🔙 后退到百度:{driver.title}")

# 前进到后退前的页面(CSDN)
driver.forward()
print(f"➡️ 前进到CSDN:{driver.title}")
  • 若浏览器只有一个页面,back()/forward()操作无效(不会报错,但无视觉变化)。
8.关闭浏览器

脚本执行完毕后,清理chrome进程,避免残留后台进程占用系统资源

8.1关闭当前标签页
复制代码
# 先打开一个新标签页(演示效果)
driver.execute_script("window.open('https://www.qq.com/')")  # 打开腾讯网新标签
# 关闭当前标签页(此时关闭的是CSDN标签,腾讯网标签仍保留)
driver.close()
print("❌ 当前标签页已关闭,浏览器仍保留")
8.2关闭整个浏览器
复制代码
# 关闭所有标签页,终止Chrome进程(彻底清理)
driver.quit()
print("❌ 浏览器已完全关闭,所有进程已清理")

注意事项

  • 若步骤 3 配置了detach=True,执行quit()仍会强制关闭浏览器;
  • 脚本结束前建议执行driver.quit(),否则多次运行后会残留多个 Chrome 后台进程(可在任务管理器中看到);
  • close()仅关当前标签,quit()关整个浏览器,根据需求选择。
相关推荐
enfpZZ小狗2 小时前
使用Flask快速搭建轻量级Web应用
jvm·数据库·python
不吃洋葱.2 小时前
js主要内容
开发语言·javascript·ecmascript
Rhys..2 小时前
python + selenium 如何定位动态元素
开发语言·python·selenium
源代码•宸2 小时前
Golang原理剖析(GMP调度原理)
开发语言·经验分享·后端·面试·golang·gmp·runnext
LawrenceLan2 小时前
Flutter 零基础入门(二十三):Icon、Image 与资源管理
开发语言·前端·flutter·dart
余衫马2 小时前
Qt for Python:PySide6 入门指南(中篇)
开发语言·c++·python·qt
叫我:松哥2 小时前
基于YOLO的图像识别系统,结合Flask、Bootstrap和SQLite,提供图像检测、数据管理和用户交互功能,可以检测80个类别
人工智能·python·yolo·信息可视化·sqlite·flask·bootstrap
摘星编程2 小时前
在OpenHarmony上实现LayoutAnimation自定义动画
python
叫我辉哥e12 小时前
新手进阶Python:办公看板集成审批流+精细化权限+日志审计
开发语言·python·信息可视化