当前位置: 首页 > news >正文

【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 世界的大门,让您在测试、数据爬取及用户交互模拟中更加游刃有余。

相关文章:

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

#1024程序员节|征文# 🌈个人主页:易辰君-CSDN博客 🔥 系列专栏:https://blog.csdn.net/2401_86688088/category_12797772.html ​ 目录 前言 一、准备工作 (一)安装 Selenium 库 &#xff0…...

mono源码交叉编译 linux arm arm64全过程

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…...

矩阵的可解性:关于Ax=b的研究

上一篇文章讲解了如何求解 A x 0 Ax0 Ax0,得到 A A A的零空间。 类似的,我们今天学习的是如何求解 A x b Axb Axb,并以此加强你对线性代数中,代数与空间的理解。 同样的,我们举与上一次一样的例子,矩阵 …...

10.22.2024刷华为OD C题型(三)--for循环例子

脚踝动了手术,现在宾馆恢复,伤筋动骨一百天还真不是说笑的,继续努力吧。 文章目录 靠谱的车灰度图恢复灰度图恢复 -- for循环使用例子 靠谱的车 https://www.nowcoder.com/discuss/564514429228834816 这个题目思路不难,就是要自…...

QT:MaintenanceTool 模块安装工具

QT的MaintenanceTool 工具对已安装的 Qt 进行卸载、修复等其他操作时提示At least one valid and enabled repository required for this action to succeed 解决方式:在设置中添加一个临时的仓库 https://mirrors.tuna.tsinghua.edu.cn/qt/online/qtsdkrepositor…...

同标签实现监听LocalStorage

使用 React 生命周期函数 useEffect来监听和处理 LocalStorage 的变化 import React, { useEffect } from react;const LocalStorageListener () > {useEffect(() > {// 注册监听器const handleStorageChange (event) > {if (event.key myKey) {console.log(注册…...

JAVA高性能缓存项目

版本一 代码实现 import java.util.HashMap; import java.util.concurrent.TimeUnit;public class CacheExample01 {private final static HashMap<String, Integer> cache new HashMap<>();public static Integer check(String userId) throws InterruptedExce…...

智慧农业大数据平台:智汇田园,数驭未来

智慧农业大数据平台 计讯物联智慧农业大数据平台是一个集管理数字化、作业自动化、生产智能化、产品绿色化、环境信息化、服务现代化于一体的多功能监管系统。它通过与硬件产品的搭配使用&#xff0c;实现对农业生产全过程的实时监测、精准控制和科学管理。该平台集成了多个数…...

Go语言基础教程:可变参数函数

Go 语言允许函数接收可变数量的参数&#xff0c;这种特性对于处理数量不确定的参数特别有用。在本教程中&#xff0c;我们将通过示例代码讲解如何定义和使用 Go 的可变参数函数。 package mainimport "fmt"// 定义一个可变参数函数 sum&#xff0c;接收任意数量的整…...

高并发场景下解决并发数据不一致

简单的场景: 全量数据更新的情况下, 不在乎同一秒的请求都必须要成功, 只留下最新的更新请求数据 方案常用的是 1、数据库增加时间戳标识实现的乐观锁, 请求参数从源头带上微秒或者毫秒时间戳数据库存储, 然后在更新SQL语句上比较 (数据库的时间 < 参数传递的时间) 例如: A…...

OpenAI GPT-o1实现方案记录与梳理

本篇文章用于记录从各处收集到的o1复现方案的推测以及介绍 目录 Journey Learning - 上海交通大学NYUMBZUAIGAIRCore IdeaKey QuestionsKey TechnologiesTrainingInference A Tutorial on LLM Reasoning: Relevant methods behind ChatGPT o1 - UCL汪军教授Core Idea先导自回归…...

Excel:vba实现生成随机数

Sub 生成随机数字()Dim randomNumber As IntegerDim minValue As IntegerDim maxValue As Integer 设置随机数的范围(假入班级里面有43个学生&#xff0c;学号是从1→43)minValue 1maxValue 43 生成随机数(在1到43之间生成随机数)randomNumber Application.WorksheetFunctio…...

Python | Leetcode Python题解之第506题相对名次

题目&#xff1a; 题解&#xff1a; class Solution:desc ("Gold Medal", "Silver Medal", "Bronze Medal")def findRelativeRanks(self, score: List[int]) -> List[str]:ans [""] * len(score)arr sorted(enumerate(score), …...

安全见闻(6)

声明&#xff1a;学习视频来自b站up主 泷羽sec&#xff0c;如涉及侵权马上删除文章 感谢泷羽sec 团队的教学 视频地址&#xff1a;安全见闻&#xff08;6&#xff09;_哔哩哔哩_bilibili 学无止境&#xff0c;开拓自己的眼界才能走的更远 本文主要讲解通讯协议涉及的安全问题。…...

Promise、async、await 、异步生成器的错误处理方案

1、Promise.all 的错误处理 Promise.all 方法接受一个 Promise 数组&#xff0c;并返回所有解析 Promise 的结果数组&#xff1a; const promise1 Promise.resolve("one"); const promise2 Promise.resolve("two");Promise.all([promise1, promise2]).…...

腾讯云:数智教育专场-学习笔记

15点13分2024年10月21日&#xff08;短短5天的时间&#xff0c;自己的成长速度更加惊人&#xff09;-开始进行“降本增效”学习模式&#xff0c;根据小米手环对于自己的行为模式分析&#xff08;不断地寻找数据之间的关联性&#xff09;&#xff0c;每天高效记忆时间&#xff0…...

Ovis: 多模态大语言模型的结构化嵌入对齐

论文题目&#xff1a;Ovis: Structural Embedding Alignment for Multimodal Large Language Model 论文地址&#xff1a;https://arxiv.org/pdf/2405.20797 github地址&#xff1a;https://github.com/AIDC-AI/Ovis/?tabreadme-ov-file 今天&#xff0c;我将分享一项重要的研…...

python的Django的render_to_string函数和render函数模板的使用

一、render_to_string render_to_string 是 Django 框架中的一个便捷函数&#xff0c;用于将模板渲染为字符串。 render_to_string(template_name.html, context, requestNone, usingNone) template_name.html&#xff1a;要渲染的模板文件的名称。context&#xff1a;传递给…...

基于Python大数据的王者荣耀战队数据分析及可视化系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…...

【Linux学习】(3)Linux的基本指令操作

前言 配置Xshell登录远程服务器Linux的基本指令——man、cp、mv、alias&which、cat&more&less、head&tail、date、cal、find、grep、zip&tar、bc、unameLinux常用热键 一、配置Xshell登录远程服务器 以前我们登录使用指令&#xff1a; ssh 用户名你的公网…...

Mac 使用脚本批量导入 Apple 歌曲

最近呢&#xff0c;买了一个 iPad&#xff0c;虽然家里笔记本台式都有&#xff0c;显示器都是 2个&#xff0c;比较方便看代码&#xff08;边打游戏边追剧&#xff09;。 但是在床上拿笔记本始终还是不方便&#xff0c;手机在家看还是小了点&#xff0c;自从有 iPad 之后&…...

全桥PFC电路及MATLAB仿真

一、PFC电路原理概述 PFC全称“Power Factor Correction”&#xff08;功率因数校正&#xff09;&#xff0c;PFC电路即能对功率因数进行校正&#xff0c;或者说是能提高功率因数的电路。是开关电源中很常见的电路。功率因数是用来描述电力系统中有功功率&#xff08;实际使用…...

【安当产品应用案例100集】025-确保数据安全传输——基于KMS与HSM的定期分发加密解决方案

引言&#xff1a; 在当今快速发展的数字化时代&#xff0c;企业面临着前所未有的信息安全挑战。尤其是在需要向供应商定期分发敏感数据的情况下&#xff0c;如何保证这些数据在传输过程中的安全性变得至关重要。为此&#xff0c;我们推出了结合安当KMS密钥管理平台与HSM密码机…...

十 缺陷检测解决策略之三:频域+空域

十 缺陷检测解决策略之三:频域空域 read_image (Image, 矩形) * 中间低频&#xff0c;四周高频 fft_image (Image, ImageFFT) * 中间低频&#xff0c;四周高频 fft_generic (Image, ImageFFT1, to_freq, -1, sqrt, dc_center, complex) * 中间高频&#xff0c;四周低频 rft_ge…...

有望第一次走出慢牛

A股已走完30多年历程。 大约每十年&#xff0c;会经历一轮牛熊周期。特点是每一轮周期&#xff0c;大约九成的时间都是熊市主导。就是我们常说的 快牛慢熊。 这一次&#xff0c;会不会重复历史? 历史不会简单重复。已经感受到了盘面的变化。 有人说&#xff0c;股市爆涨爆…...

计算机网络(十二) —— 高级IO

#1024程序员节 | 征文# 目录 一&#xff0c;预备 1.1 重新理解IO 1.2 五种IO模型 1.3 非阻塞IO 二&#xff0c;select 2.1 关于select 2.2 select接口参数解释 2.3 timeval结构体和fd_set类型 2.4 socket就绪条件 2.5 select基本工作流程 2.6 简单select的服务器代…...

电力行业 | 等保测评(网络安全等级保护)工作全解

电力行业为什么要做网络安全等级保护&#xff1f; 电力行业是关系到国家安全和社会稳定的基础性行业&#xff0c;电力行业信息化程度相对较高&#xff0c;是首批国家信息安全等级保护的重点行业。 01 国家法律法规的要求 1994《计算机信息系统安全保护条例》&#xff08;国务…...

总裁主题CeoMax-Pro主题7.6开心版

激活方式&#xff1a; 1.授权接口源码ceotheme-auth-api.zip搭建一个站点&#xff0c;绑定www.ceotheme.com域名&#xff0c;并配置任意一个域名的 SSL 证书。 2.在 hosts 中添加&#xff1a;127.0.0.1 www.ceotheme.com 3.上传class-wp-http.php到wp-includes目录&#xff…...

深入探讨编程的核心概念、学习路径、实际应用以及对未来的影响

在当今这个数字化时代&#xff0c;编程已成为连接现实与虚拟世界的桥梁&#xff0c;它不仅塑造了我们的生活方式&#xff0c;还推动了科技的飞速发展。从简单的网页制作到复杂的人工智能系统&#xff0c;编程无处不在&#xff0c;其重要性不言而喻。本文旨在深入探讨编程的核心…...

IDEA如何将一个分支的代码合并到另一个分支(当前分支)

前言 我们在使用IDEA开发Java应用时&#xff0c;经常是和git一起使用的。我们对于git常用的操作包括提交&#xff0c;推送&#xff0c;拉取代码等。还有一个重要的功能是合并代码。 那么&#xff0c;我们应该如何合并代码呢&#xff1f; 如何合并代码 首先&#xff0c;我们…...

甘肃住房建设厅的网站/2023年11月新冠高峰

win7电脑蓝屏0x0000007b的原因和解决方法如下&#xff1a;1、重启电脑&#xff0c;不停的按下F2或者DEL进入BIOS(不同品牌的电脑进入方式会不一样&#xff0c;大家可以去搜自己品牌的电脑如何进入bios)。2、进入BIOS后&#xff0c;找到的SATA Mode 或 Serial ATA Mode &#xf…...

汉沽网站建设制作/市场营销培训

目录 一&#xff1a;介绍 二&#xff1a;计时器Timer类的编写 三&#xff1a;计时器管理TimerManager类的编写 四&#xff1a;使用方法 一&#xff1a;介绍 这里我们使用List来管理定义的所有计时器Timer&#xff0c;首先就是需要构建计时器的完整逻辑&#xff0c;包括计时…...

广州做外贸网站/网络推广网站推广方法

题意&#xff1a; 每次只能取两端&#xff0c;然后第 i 次取要val[ i ]*i&#xff0c;求一个最大值 一切都是错觉【读者省略此段】 这道题目一开始想的就是记忆化搜索&#xff0c;然后太天真了&#xff1f;好像是&#xff0c;一开始用一维dp[ i ]直接代表一个点的最大。。。…...

中国互联网协会是什么单位/seo快照推广

一、从一个微信Bug说起 问题&#xff1a;在微信Android客户端&#xff0c;一张七牛CDN上的HTTPS链接的图片&#xff0c;用微信浏览器打开可以正常访问&#xff0c;但是&#xff0c;长按图片保存时&#xff0c;却提示下载图片失败。发现这个问题后&#xff0c;我用了一个简单的测…...

网站权重分散/百度号注册官网

1、接收参数是Date类型 接收参数前边加一个DateTimeFormat(pattern "yyyy-MM-dd") RequestMapping("/updateDate") public String updateDate(DateTimeFormat(pattern "yyyy-MM-dd") Date newDate) {return "redirect:list.do"; }…...

网站建设之家/信息流优化师面试常见问题

1、Yolov5损失函数分析 2、bbox 回归损失 v5 使用的是 CIoU Loss&#xff0c;后续又优化出EIOU Loss如下所示 论文&#xff1a;Focal and efficient IOU loss for accurate bounding box regression 3、目标置信度损失 目标置信度损失由正样本匹配得到的样本对计算&#xff0c…...