【Python爬虫实战】Selenium自动化网页操作入门指南

#1024程序员节|征文#

  🌈个人主页:易辰君-CSDN博客
🔥 系列专栏:https://blog.csdn.net/2401_86688088/category_12797772.html

目录

前言

一、准备工作

(一)安装 Selenium 库

(二)下载 WebDriver

(三)将 WebDriver 添加到系统 PATH

(四)检查 WebDriver 是否成功配置

(五)使用 Selenium 代码测试

(六)可选设置:使用无头模式

(七)浏览器驱动版本控制

二、声明浏览器对象

(一)使用 Chrome 浏览器

(二)使用 Firefox 浏览器

(三)使用 Edge 浏览器

(四)使用 Safari 浏览器

(五)使用 WebDriver Manager 动态管理驱动版本

(六)关闭浏览器

三、基本使用

(一)导入 Selenium 并声明浏览器对象

(二)打开网页

(三)查找页面元素

(四)执行操作

(五)获取元素属性和文本内容

(六)等待页面加载

(七)处理多个窗口

(八)处理警告和弹窗


前言

在现代网络开发和数据爬取中,Selenium 已成为不可或缺的自动化工具之一。无论是用于测试、数据抓取,还是模拟用户行为,Selenium 都可以在不干预的情况下自动化浏览器操作,为开发者节省大量时间和精力。本指南将带您从 Selenium 的安装配置到高级操作,逐步掌握网页自动化的核心技巧。


一、准备工作

在使用 Selenium 进行网页自动化操作之前,需要完成一些准备工作,包括安装 Selenium 库、下载合适的 WebDriver 以及配置环境。以下是详细的准备步骤:

(一)安装 Selenium 库

首先,确保在 Python 环境中安装了 Selenium 库。可以使用以下命令通过 pip 安装:

pip install selenium

(二)下载 WebDriver

Selenium 需要 WebDriver 来驱动不同的浏览器,如 Chrome、Firefox 等。根据选择的浏览器,下载相应的 WebDriver:

  • Chrome:Chrome 使用 ChromeDriver。前往 ChromeDriver下载页面,下载与你的 Chrome 版本对应的驱动程序。

  • Firefox:Firefox 使用 geckodriver。下载地址:GeckoDriver下载页面。

  • Edge:Edge 使用 msedgedriver。下载地址:EdgeDriver下载页面。

  • Safari:Safari 自带支持 WebDriver,不需要额外下载,但需要在 Safari 的开发菜单中启用远程自动化。

注意:下载的 WebDriver 版本必须与所使用的浏览器版本匹配。一般情况下可以在浏览器的“关于”页面查看浏览器版本号。

(三)将 WebDriver 添加到系统 PATH

将下载的 WebDriver 放在系统 PATH 中,以便 Selenium 可以直接调用。

  • Windows:将 chromedriver.exe 等文件放置在某个文件夹(如 C:\WebDriver\),然后将此路径添加到系统环境变量 PATH 中。

  • Mac 和 Linux:可以将驱动文件放在 /usr/local/bin 等 PATH 路径下,或者在命令行中运行:

export PATH=$PATH:/path/to/driver

(四)检查 WebDriver 是否成功配置

在终端或命令提示符中,输入以下命令,验证 WebDriver 是否安装成功:

chromedriver --version  # 对于 ChromeDriver
geckodriver --version   # 对于 GeckoDriver

如果显示驱动版本号,则说明配置成功。

(五)使用 Selenium 代码测试

完成上述配置后,可以用简单的 Selenium 代码测试是否能成功启动浏览器并访问网页。以下示例以 Chrome 为例:

from selenium import webdriver
from selenium.webdriver.common.by import By# 初始化 WebDriver
driver = webdriver.Chrome()  # 如果未将 ChromeDriver 添加到 PATH,可以指定路径,如 webdriver.Chrome(executable_path='/path/to/chromedriver')# 打开网页
driver.get("https://www.google.com")# 查找页面元素,测试是否加载成功
search_box = driver.find_element(By.NAME, "q")
search_box.send_keys("Selenium WebDriver")# 关闭浏览器
driver.quit()

(六)可选设置:使用无头模式

在一些不需要显示浏览器界面的场景,如服务器环境,可以使用无头模式:

from selenium.webdriver.chrome.options import Optionsoptions = Options()
options.headless = True
driver = webdriver.Chrome(options=options)
driver.get("https://www.example.com")

(七)浏览器驱动版本控制

Chrome 浏览器自动更新后,可能导致 ChromeDriver 不匹配的问题。可以通过以下方式保持一致性:

  • 手动更新 ChromeDriver:每次浏览器更新后,下载新版本的 ChromeDriver。

  • 使用 WebDriver Manager:使用 WebDriver Manager 自动管理 WebDriver 的安装和更新。

pip install webdriver-manager

示例:

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManagerdriver = webdriver.Chrome(ChromeDriverManager().install())
driver.get("https://www.example.com")

二、声明浏览器对象

在 Selenium 中,声明浏览器对象是启动一个浏览器实例的第一步。以下是不同浏览器的声明方式。

(一)使用 Chrome 浏览器

from selenium import webdriver# 声明 Chrome 浏览器对象
driver = webdriver.Chrome()  # 如果 chromedriver 不在系统 PATH 中,可以指定路径
# 示例: driver = webdriver.Chrome(executable_path='/path/to/chromedriver')

(二)使用 Firefox 浏览器

from selenium import webdriver# 声明 Firefox 浏览器对象
driver = webdriver.Firefox()  # 如果 geckodriver 不在系统 PATH 中,可以指定路径
# 示例: driver = webdriver.Firefox(executable_path='/path/to/geckodriver')

(三)使用 Edge 浏览器

from selenium import webdriver# 声明 Edge 浏览器对象
driver = webdriver.Edge()  # 如果 msedgedriver 不在系统 PATH 中,可以指定路径
# 示例: driver = webdriver.Edge(executable_path='/path/to/msedgedriver')

(四)使用 Safari 浏览器

在 Mac 上可以使用 Safari,需启用 Safari 的 WebDriver 支持。

from selenium import webdriver# 声明 Safari 浏览器对象
driver = webdriver.Safari()

(五)使用 WebDriver Manager 动态管理驱动版本

使用 webdriver-manager 自动安装和更新驱动,避免手动下载驱动文件。

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager# 自动下载并使用 ChromeDriver
driver = webdriver.Chrome(ChromeDriverManager().install())

(六)关闭浏览器

在完成操作后,可以使用以下命令关闭浏览器:

driver.quit()  # 关闭所有浏览器窗口并结束 WebDriver 会话
# 或者使用 driver.close() 关闭当前窗口

声明浏览器对象后,即可使用 driver 对象执行自动化操作,如访问网页、查找元素、点击、输入文本等。


三、基本使用

在 Selenium 中,通过声明浏览器对象后,可以执行一系列自动化操作。以下是 Selenium 的基本使用方法,包括打开网页、查找元素、执行操作、处理等待等。

(一)导入 Selenium 并声明浏览器对象

from selenium import webdriver
from selenium.webdriver.common.by import By# 使用 Chrome 浏览器
driver = webdriver.Chrome()

(二)打开网页

使用 get() 方法打开目标网页:

driver.get("https://www.example.com")

(三)查找页面元素

Selenium 提供多种方式查找元素,可以通过 ID、类名、标签名、CSS 选择器、XPath 等来定位元素:

# 通过 ID 查找元素
element = driver.find_element(By.ID, "element_id")# 通过类名查找元素
element = driver.find_element(By.CLASS_NAME, "class_name")# 通过标签名查找元素
element = driver.find_element(By.TAG_NAME, "tag_name")# 通过 CSS 选择器查找元素
element = driver.find_element(By.CSS_SELECTOR, "css_selector")# 通过 XPath 查找元素
element = driver.find_element(By.XPATH, "//div[@class='example']")

(四)执行操作

对找到的元素进行点击、输入文本等操作。

  • 点击元素
button = driver.find_element(By.ID, "submit_button")
button.click()
  • 输入文本
search_box = driver.find_element(By.NAME, "q")
search_box.send_keys("Selenium WebDriver")
  • 提交表单
search_box.submit()

(五)获取元素属性和文本内容

element = driver.find_element(By.ID, "element_id")
print(element.text)  # 获取元素的文本内容
print(element.get_attribute("href"))  # 获取元素的属性值

(六)等待页面加载

在某些操作需要等待元素加载时,可以使用显式等待来等待特定的元素加载完成。常用的等待有:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC# 设置显式等待
element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "element_id"))
)

(七)处理多个窗口

在操作过程中,可以打开新窗口或标签页,并在不同窗口之间进行切换:

# 打开新窗口
driver.execute_script("window.open('https://www.example.com');")# 切换到新窗口
driver.switch_to.window(driver.window_handles[1])# 关闭当前窗口并切换回原窗口
driver.close()
driver.switch_to.window(driver.window_handles[0])

(八)处理警告和弹窗

Selenium 支持处理弹出警告或确认对话框:

alert = driver.switch_to.alert
alert.accept()      # 接受警告
alert.dismiss()     # 取消警告

四、总结

Selenium 提供了强大的网页自动化功能,适合广泛的应用场景。通过掌握基础配置、元素定位、多窗口处理、弹窗管理等技巧,您将能够轻松应对复杂的网页自动化任务。希望本篇指南为您打开了 Selenium 世界的大门,让您在测试、数据爬取及用户交互模拟中更加游刃有余。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/457260.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VMware Workstation Pro 16 搭建 android-x86过程问题罗列

1、搭建完成后,app安装显示软件包解析失败或app打开闪退 测试了android-x86_64-9.0-r2这个版本,发现按照网上部署arm库方法没有成功,最后使用android-x86-7.1-r5版本解决了问题 2、android-x86网络连接不通 虚拟机网络设置选择桥接模式 安…

低代码平台如何通过AI赋能,实现更智能的业务自动化?

引言 随着数字化转型的加速推进,企业在日常运营中面临的业务复杂性与日俱增。如何快速响应市场需求,优化流程,并降低开发成本,成为各行业共同关注的核心问题。低代码平台作为一种能够快速构建应用程序的工具,因其可视化…

Springboot 使用EasyExcel导出Excel文件

Springboot 使用EasyExcel导出Excel文件 Excel导出系列目录:引入依赖创建导出模板类创建图片转化器 逻辑处理controllerservice 导出效果遗留问题 Excel导出系列目录: 【Springboot 使用EasyExcel导出Excel文件】 【Springboot 使用POI导出Excel文件】 …

如何提高游戏的游戏性

改进游戏玩法是一个动态的过程,需要深入了解是什么让玩家保持参与、挑战和兴奋,以获得更多。优秀游戏的核心是平衡——乐趣和难度的无缝结合,让玩家在不感到沮丧的情况下为自己的技能感到奖励。微调这种平衡通常涉及调整难度曲线,…

HTML+JavaScript案例分享: 打造经典俄罗斯方块,详解实现全过程

在本文中,我们将深入探讨如何使用 JavaScript 实现经典的俄罗斯方块游戏。俄罗斯方块是一款广为人知的益智游戏,通过操纵各种形状的方块,使其在游戏区域内排列整齐,以消除完整的行来获得分数。 效果图如下: 一、游戏界面与布局 我们首先使用 HTML 和 CSS 来创建游戏的界面…

力扣283-- 移动零

开始做梦的地方 力扣283 : 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。请注意 ,必须在不复制数组的情况下原地对数组进行操作。 何解? 1,暴力枚举&#xff1a…

Vue前端开发2.2 数据绑定

文章目录 一、初识数据绑定(一)数据绑定概述(二)数据绑定构成1、定义数据2、输出数据 (三)数据绑定案例演示1、创建单文件组件2、切换页面显示组件 (四)将Vue引入HTML页面中1、概述2…

高效文本编辑与导航:Vim中的三种基本模式及粘滞位的深度解析

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…

sheng的学习笔记-AI基础-正确率/召回率/F1指标/ROC曲线

AI目录:sheng的学习笔记-AI目录-CSDN博客 分类准确度问题 假设有一个癌症预测系统,输入体检信息,可以判断是否有癌症。如果癌症产生的概率只有0.1%,那么系统预测所有人都是健康,即可达到99.9%的准确率。 但显然这样的…

Linux中级(DNS域名解析服务器)

一。产生原因1.IP地址:是互联网上计算机唯一的逻辑地址,通过IP地址实现不同计算机之间的相互通信,每台联网计算机都需要通过IP地址来互相联系和分别,但由于IP地址是由一串容易混淆的数字串构成,人们很难记忆所有计算机…

MySql中的锁的分类

锁的分类 MySQL锁可以按模式分类为:乐观锁与悲观锁。按粒度分可以分为全局锁、表级锁、页级锁、行级锁。按属性可以分为:共享锁、排它锁。按状态分为:意向共享锁、意向排它锁。按算法分为:间隙锁、临键锁、记录锁。 二、全局锁、表…

3-petalinux2018.3 摸索记录 - 命令驱动 _ 交叉编译链

一、命令行控制GPIO 对于ps端设备,在板卡的linux系统中,切换到/sys/class/gpio路径下可以看到目前挂载的gpio设备。 export: 导入用户空间 gpiochip: 系统中gpio寄存器信息 unexport: 移除用户空间 以MIO40和MIO42…

数据结构------手撕链表(一)【不带头单向非循环】

文章目录 链表概念链表的使用LinkedList 的几种遍历方式单链表的模拟实现(不带头)链表面试题 观察ArrayList 顺序表的源码发现,底层是使用数组实现的。由于其底层是一段连续空间,当在ArrayList任意位置插入或者删除元素时&#xf…

Java基础(7)图书管理系统

目录 1.前言 2.正文 2.1思路 2.2Book包 2.3people包 2.4operation包 2.5主函数 3.小结 1.前言 哈喽大家好吖,今天来给前面Java基础的学习来一个基础的实战,做一个简单的图书管理系统,这里边综合利用了我们之前学习到的类和对象&…

研发运营一体化(DevOps)能力成熟度模型

目录 应用设计 安全风险管理 技术运 持续交付 敏捷开发管理 基于微服务的端到端持续交付流水线案例 应用设计 安全风险管理 技术运 持续交付

Android调用系统相机录像并设置参数

最近要做一个 Android上的录像功能&#xff0c;由于之前做拍照功能完全是用自定义方式&#xff0c;太麻烦。故这次决定直接调用系统相机来录像。 一、添加权限 首先&#xff0c;添加必要的权限 <!-- 授予该程序使用摄像头的权限 --><uses-permission android:name&q…

Could not find artifact cn.hutool:hutool-all:jar:8.1 in central 导入Hutool报错

<!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all --><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.9</version></dependency> 引入hutool 8.1版本的工具…

攻防世界-流量分析WP

流量分析1来自 <攻防世界> 题目描述:流量分析&#xff0c;你知道这堆流量做了什么事情吗&#xff0c;你能恢复出来flag吗&#xff1f; 1&#xff0c;首先查看IPv4统计信息 如果该流量记录的是黑客的攻击行为产生的流量&#xff0c;那么出现频率最高的流量应该来自攻击者…

2024软考网络工程师笔记 - 第8章.网络安全

文章目录 网络安全基础1️⃣网络安全威胁类型2️⃣网络攻击类型3️⃣安全目标与技术 &#x1f551;现代加密技术1️⃣私钥密码/对称密码体制2️⃣对称加密算法总结3️⃣公钥密码/非对称密码4️⃣混合密码5️⃣国产加密算法 - SM 系列6️⃣认证7️⃣基于公钥的认证 &#x1f552…

论文笔记:LaDe: The First Comprehensive Last-mile Delivery Dataset from Industry

2023 KDD 1 intro 1.1 背景 随着城市化进程的加快和电子商务的发展&#xff0c;最后一公里配送已成为一个关键的研究领域 最后一公里配送&#xff0c;如图1所示&#xff0c;是指连接配送中心和客户的包裹运输过程&#xff0c;包括包裹的取件和配送除了对客户满意度至关重要外…