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

news2024/11/23 4:09:47

#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 Options

options = 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 ChromeDriverManager

driver = 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.coloradmin.cn/o/2224233.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024 年我的 MacBook 软件开发设置分享

在过去的一年里,我的 MacBook 软件开发环境经历了一些变化。今天,我想分享我的最新设置、工作流程和工具,帮助你在软件开发中提升效率。 我的工作设备 💻 我目前使用的是 16 英寸的 MacBook Pro M1 Max。这台机器的性能令人印象…

「C/C++」C++ STL容器库 之 std::multimap 键值对的集合容器

✨博客主页何曾参静谧的博客📌文章专栏「C/C」C/C程序设计📚全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…

化验单智能识别与数据抽取:AI平台赋能医疗信息化

化验单处理在医院日常运作中常遇信息量大、数据整理不易、效率低的问题。思通数科推出的AI多模态平台,借助光学字符识别(OCR)、图像处理等技术,提供了一款开源化验单智能识别系统,能迅速识别、提取和分析化验单数据。 …

【云原生网关】Higress 从部署到使用详解

目录 二、网关概述 2.1 什么是云原生网关 2.2 常见的云原生网关 2.2.1 Nginx 2.2.2 ApiSix 2.2.3 Kong 2.2.4 Apache Shenyu 2.2.5 Higress 2.2.6 Envoy​​​​​​​ 三、higress介绍 3.1 什么是higress 3.2 Higress 定位 3.3 Higress 内核选择 四、Higress搭…

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

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

网络一些相关术语

目录 网络一些相关术语 转发平面效率 可扩展性 控制平面 网络拓扑 服务质量(QoS) 网络协议 网络带宽 网络拥塞 网络安全 网络冗余 网络切片 网络延迟 网络地址转换(NAT) 虚拟专用网络(VPN) …

C#中的接口的使用

定义接口 public interface IMyInterface {int MyProperty { get; set; }void MyMethod(); } 实现类 internal class MyClass : IMyInterface {public int MyProperty { get; set; }public void MyMethod(){Console.WriteLine("MyMethod is called");} } 目录结构…

每天一题:洛谷P2041分裂游戏

题目描述 有一个无限大的棋盘,棋盘左下角有一个大小为 n 的阶梯形区域,其中最左下角的那个格子里有一枚棋子。你每次可以把一枚棋子“分裂”成两枚棋子,分别放在原位置的上边一格和右边一格。(但如果目标位置已有棋子&#xff0c…

《人脸表情识别可解释性研究综述(计算机学报)》

文章全面综述了**人脸表情识别(FER)**领域的可解释性研究,探讨了表情识别的基本概念、技术方法和研究进展,并重点介绍了可解释性研究的重要性以及提高模型可解释性的方法,如模型的可视化和简化等。 论文内容概述&…

【智能大数据分析 | 实验四】Spark实验:Spark Streaming

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈智能大数据分析 ⌋ ⌋ ⌋ 智能大数据分析是指利用先进的技术和算法对大规模数据进行深入分析和挖掘,以提取有价值的信息和洞察。它结合了大数据技术、人工智能(AI)、机器学习(ML&a…

基于SSM考研助手系统的设计

管理员账户功能包括:系统首页,个人中心,学生管理,教学秘书管理,考研资讯管理,考研名师管理,考研信息管理,系统管理 教学秘书账号功能包括:系统首页,个人中心…

如何加密电脑磁盘?电脑本地磁盘加密方法介绍

随着信息技术的不断发展,电脑磁盘加密已经成为保护个人隐私和数据安全的重要手段。本文将介绍几种常见的电脑本地磁盘加密方法,帮助用户保护自己的数据安全。 文件夹只读加密专家 文件夹只读加密专家不仅可以加密电脑中的文件夹,还可以加密保…

JMeter快速入门示例

JMeter是一款开源的性能测试工具,常用于对Web服务和接口进行性能测试。 下载安装 官方下载网址: https://jmeter.apache.org/download_jmeter.cgi也可以到如下地址下载:https://download.csdn.net/download/oscar999/89910834 这里下载Wi…

docker run 命令解析

docker run 命令解析 docker run 命令用于从给定的镜像启动一个新的容器。这个命令可以包含许多选项,下面是一些常用的选项: -d:后台运行容器,并返回容器ID;-i:以交互模式运行容器,通常与 -t …

leetcode动态规划(十七)-组合总和IV

题目 377.组合总和IV 给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数。 题目数据保证答案符合 32 位整数范围。 示例 1: 输入:nums [1,2,3], target 4 输出&a…

告别接口困扰,LDR6020芯片打造USB-C显示器智能新选择!

随着USB TYPE-C接口技术的广泛普及和USB4标准的崭新推出,传统HDMI与DisplayPort接口的主导地位正悄然受到挑战。USB TYPE-C接口凭借其小巧的体积、高速的传输速度以及丰富的功能特性,正逐步成为显示器与电视机接口的首选。本文旨在深入探讨如何设计基于U…

【电商搜索】现代工业级电商搜索技术-亚马逊-经典的Item-to-Item协同推荐算法

【电商搜索】现代工业级电商搜索技术-亚马逊-经典的Item-to-Item协同推荐算法 文章目录 【电商搜索】现代工业级电商搜索技术-亚马逊-经典的Item-to-Item协同推荐算法1. 论文信息2. 算法介绍3. 创新点小结4. 实验效果5. 算法结论6. 代码实现7. 问题及优化方向1. 冷启动问题2. 稀…

node集成redis (教学)

文章目录 前言一、安装redis二、可视化界面测试连接1.vscode安装插件 三、node代码编写1.先安装两个库(redis和ioredis)2.测试连接 (前提是你的redis服务器要启动起来) 总结 前言 在Node.js中集成ioredis是一个常见的做法&#x…

最新PHP网盘搜索引擎系统源码 附教程

最新PHP网盘搜索引擎系统源码 附教程,这是一个基于thinkphp5.1MySQL开发的网盘搜索引擎,可以批量导入各大网盘链接,例如百度网盘、阿里云盘、夸克网盘等。 功能特点:网盘失效检测,后台管理功能,网盘链接管…

react18中的jsx 底层渲染机制相关原理

jsx 底层渲染机制 渲染 jsx 时,会先解析 jsx,生成一个虚拟 dom(virtual dom)。然后将虚拟 dom 渲染成真实 dom。如果 jsx 中包含事件,会将事件绑定到真实 dom 上。 虚拟 dom 对象,是框架内部构建的一套对象体系,对象…