python爬虫-----Selenium (第二十二天)

🎈🎈作者主页: 喔的嘛呀🎈🎈
🎈🎈所属专栏:python爬虫学习🎈🎈
✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天开心哦!✨✨ 

目录

一、什么是Selenium

二、为什么使用selenium?

三、python爬虫selenium知识点

1、安装 Selenium:使用 pip 安装 Selenium 库。

2、下载浏览器驱动

3、创建 WebDriver 实例

4、访问网页:使用 WebDriver 实例打开要访问的网页。

6、元素操作

7、等待页面加载:

8、获取页面数据

9、解析页面数据


使用 Selenium,我们可以模拟用户在浏览器中的操作,比如点击按钮、填写表单、下拉滚动条等,从而可以访问那些通过传统的 HTTP 请求无法获取到的数据,比如使用 JavaScript 动态加载的内容。

在本次学习中,我们将学习如何安装 Selenium 库,下载浏览器驱动程序(如 ChromeDriver、GeckoDriver 等),创建 WebDriver 实例来控制浏览器,访问网页并获取页面数据,查找页面元素并进行操作,等待页面加载完成,最后使用 BeautifulSoup 或其他库解析页面数据,提取我们需要的信息。

通过学习 Selenium,你将能够扩展你的网页爬取技能,处理更加复杂的网页结构和交互逻辑,让你的爬虫更加强大和智能。

总共有十九个知识点,今天我们先看前九个,明天后十个。

一、什么是Selenium

hello,兄弟姐妹们!在 Python 爬虫学习的第二十二天,我们将深入学习如何使用 Selenium 这一强大的工具进行网页数据提取。Selenium 是一个自动化测试工具,但也可以用于网页爬取,特别是需要模拟用户操作的情况下非常有用。

Selenium 是一个用于自动化 web 应用程序测试的工具,它可以模拟用户在浏览器中的操作,比如点击按钮、填写表单、提交数据等。Selenium 测试可以直接在浏览器中运行,就像真正的用户在操作一样,这样可以更真实地模拟用户的行为。

Selenium 支持通过各种 WebDriver 驱动真实浏览器完成测试,包括 FirefoxDriver、InternetExplorerDriver、OperaDriver、ChromeDriver 等。这些驱动程序可以启动相应的浏览器,并且可以通过编程方式控制浏览器的行为,从而实现自动化测试。

此外,Selenium 也支持无界面浏览器操作,比如使用 Headless Chrome 或者 PhantomJS,这样可以在不显示实际浏览器界面的情况下进行测试,节省资源并加快测试速度。

二、为什么使用selenium?

  1. 处理动态网页:有些网站使用 JavaScript 动态生成内容,传统的爬虫库如 urllib、requests 无法获取到动态生成的内容,而 Selenium 可以模拟浏览器行为,获取到完整的页面内容。
  2. 模拟用户操作:有些网站对于频繁请求会进行反爬虫处理,使用 Selenium 可以模拟人类用户的操作行为,如点击、滚动等,降低被识别为爬虫的概率。
  3. 解决验证码:有些网站会使用验证码来防止爬虫,Selenium 可以通过图像识别等方式自动识别验证码,实现自动化爬取。
  4. 跨平台支持:Selenium 支持多种浏览器和操作系统,可以在不同环境下运行,更加灵活。
  5. 强大的定制能力:Selenium 提供了丰富的 API,可以实现各种复杂的操作和定制需求,满足不同爬虫场景的需求。
  6. 动态加载内容:有些网页内容是通过 AJAX 或其他异步加载方式获取的,Selenium 可以等待页面完全加载后再进行内容提取,确保获取到完整的页面数据。

总的来说,使用 Selenium 可以帮助爬虫程序处理更复杂的网页,提高爬取效率和成功率,适用于对动态网页内容感兴趣的爬虫任务。

三、python爬虫selenium知识点

1、安装 Selenium:使用 pip 安装 Selenium 库。

安装 Selenium 库,可以使用 Python 的包管理工具 pip。如果你还没有安装 pip,可以参考官方文档进行安装:Installation - pip documentation v24.0)(pycharm中自带的有)

安装 Selenium 的步骤如下:

(1)打开命令行或终端。(pycharm中的terminal中输入命令)

运行以下命令安装 Selenium:


pip install selenium

等待安装完成。安装完成后,你就可以在 Python 中使用 Selenium 了。

如果需要安装特定版本的 Selenium,可以使用类似以下的命令:


pip install selenium==3.141.0

这将安装 Selenium 的 3.141.0 版本。你也可以根据需要安装其他版本。

2、下载浏览器驱动

使用 Selenium 需要下载相应的浏览器驱动,以便 Selenium 能够控制浏览器。不同的浏览器需要使用对应的驱动程序,例如 Chrome 需要 chromedriver,Firefox 需要 geckodriver。

以下是下载浏览器驱动的一般步骤:

(1)确定浏览器版本:首先确定你需要使用的浏览器版本,例如 Chrome 的版本是多少。

(2)下载对应版本的驱动程序:访问对应浏览器驱动的官方网站下载页面,下载对应浏览器版本的驱动程序。以下是一些常见浏览器的驱动下载页面:

  • Chrome: ChromeDriver
  • Firefox: GeckoDriver
  • Edge: EdgeDriver

(3)将驱动程序添加到系统 PATH:下载完成后,将驱动程序所在目录添加到系统的 PATH 环境变量中,这样 Selenium 就能找到驱动程序。

(4)使用正确的驱动程序:在创建 WebDriver 实例时,指定正确的驱动程序。例如,使用 Chrome 驱动程序创建 Chrome 浏览器的 WebDriver 实例:


from selenium import webdriver

# 指定 Chrome 驱动程序路径
driver = webdriver.Chrome(executable_path='/path/to/chromedriver')

# 打开网页
driver.get('<https://www.example.com>')

# 关闭浏览器
driver.quit()

通过以上步骤,你就可以下载并配置好浏览器驱动,以便使用 Selenium 控制浏览器进行网页操作。

3、创建 WebDriver 实例

要创建 WebDriver 实例来控制浏览器,需要先导入 webdriver 模块,然后根据要使用的浏览器类型创建相应的 WebDriver 实例。以下是使用 Selenium 创建 WebDriver 实例的示例代码:


from selenium import webdriver

# 创建一个 Chrome 浏览器实例
driver = webdriver.Chrome()

# 创建其他浏览器实例的方法可以根据需要选择相应的驱动程序和参数

在上面的示例中,我们通过调用 webdriver.Chrome()webdriver.Firefox() 等方法来创建不同浏览器类型的 WebDriver 实例。然后,我们可以使用这些实例来控制相应的浏览器进行网页操作。

4、访问网页:使用 WebDriver 实例打开要访问的网页。

要使用 WebDriver 实例打开要访问的网页,可以使用 WebDriver 实例的 get() 方法,并传入要访问的网页的 URL。以下是一个示例代码,演示如何使用 Selenium 打开网页:


from selenium import webdriver

# 创建一个 Chrome 浏览器实例
driver = webdriver.Chrome()

# 打开网页
driver.get('<https://www.example.com>')

# 关闭浏览器
driver.quit()

在这个示例中,我们首先创建了一个 Chrome 浏览器的 WebDriver 实例。然后,使用 get() 方法打开了 Example Domain 这个网页。最后,使用 quit() 方法关闭了浏览器。你可以将 URL 替换为你要访问的网页的 URL。

5、查找元素:使用 WebDriver 提供的方法查找页面元素

使用 Selenium 中的 WebDriver 实例,可以通过各种方法查找页面元素,例如根据元素的 XPath、CSS 选择器、ID 等属性。以下是一些常用的查找元素的方法:

(1)根据 ID 查找元素

element = driver.find_element_by_id('element_id')

(2)根据 class 名称查找元素

element = driver.find_element_by_class_name('class_name')

(3)根据标签名查找元素

element = driver.find_element_by_tag_name('tag_name')

(4)根据 CSS 选择器查找元素

element = driver.find_element_by_css_selector('css_selector')

(5)根据 XPath 查找元素

element = driver.find_element_by_xpath('xpath_expression')

(6)查找多个元素:如果要查找多个元素,可以使用 find_elements_* 方法,例如:

elements = driver.find_elements_by_xpath('xpath_expression')

这些方法可以用于查找页面上的各种元素,如文本框、按钮、链接等。找到元素后,就可以对其进行操作,比如点击、输入文本等。

6、元素操作

对查找到的元素进行操作是使用 Selenium 进行网页自动化的核心部分。一旦找到页面元素,就可以对其执行各种操作,比如点击链接、填写表单、提交数据等。以下是一些常用的元素操作示例:

(1)点击元素

element.click()

(2)输入文本

element.send_keys('text_to_input')

(3)清空输入框

element.clear()

(4)提交表单

form_element.submit()

(5)获取元素文本


text = element.text

(6)获取元素属性

pythonCopy code
attribute_value = element.get_attribute('attribute_name')

(7)模拟鼠标操作(需要导入 ActionChains):


from selenium.webdriver.common.action_chains import ActionChains

# 鼠标移动到元素上
ActionChains(driver).move_to_element(element).perform()

# 鼠标右键点击元素
ActionChains(driver).context_click(element).perform()

(8)模拟键盘操作(需要导入 Keys):

from selenium.webdriver.common.keys import Keys

# 模拟按下回车键
element.send_keys(Keys.ENTER)

这些操作可以让你在自动化测试或网页爬虫中与页面元素进行交互,实现各种功能。

7、等待页面加载

等待页面加载是使用 Selenium 进行网页自动化测试和爬取的重要步骤之一。在页面加载过程中,有时会出现网络延迟或异步加载的情况,为了确保页面的所有元素都已加载完成,需要使用等待机制。

Selenium 提供了两种等待方式:显式等待和隐式等待。

(1)显式等待:在代码中明确指定等待条件,直到条件满足或超时才继续执行后续操作。可以使用 WebDriverWait 类结合 expected_conditions 模块来实现。例如,等待页面标题包含特定文本:


from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 设置最长等待时间为10秒
wait = WebDriverWait(driver, 10)
# 等待直到标题包含"example"
wait.until(EC.title_contains("example"))

(2)隐式等待:在创建 WebDriver 实例后,设置一个全局的等待时间,当查找元素或执行操作时,如果找不到元素或操作耗时超过设置的等待时间,将等待一段时间再继续执行。例如:

driver.implicitly_wait(10)  # 设置隐式等待时间为10秒

在使用等待机制时,应根据实际情况合理设置等待时间,避免等待时间过长导致效率低下,或等待时间过短导致操作失败。

8、获取页面数据

要获取页面的 HTML 源码,可以使用 WebDriver 实例的 page_source 属性。这个属性可以让你获取当前页面的完整 HTML 内容,然后你可以使用解析库(如 BeautifulSoup)来解析和提取所需的信息。以下是一个示例代码:

pythonCopy code
from selenium import webdriver

# 创建一个 Chrome 浏览器实例
driver = webdriver.Chrome()

# 打开网页
driver.get('<https://www.example.com>')

# 获取页面的 HTML 源码
html_source = driver.page_source

# 关闭浏览器
driver.quit()

# 打印页面的 HTML 源码
print(html_source)

在这个示例中,我们首先创建了一个 Chrome 浏览器的 WebDriver 实例,然后使用 get() 方法打开了 Example Domain 这个网页。接着,使用 page_source 属性获取了页面的 HTML 源码,并将其打印出来。最后,使用 quit() 方法关闭了浏览器。

9、解析页面数据

解析页面数据是使用 Selenium 进行网页爬取的重要步骤之一。一旦获取到页面的 HTML 源码,就可以使用解析库(如 BeautifulSoup)来解析并提取所需的信息。以下是一个示例代码,演示如何使用 BeautifulSoup 解析页面数据:

pythonCopy code
from selenium import webdriver
from bs4 import BeautifulSoup

# 创建一个 Chrome 浏览器实例
driver = webdriver.Chrome()

# 打开网页
driver.get('<https://www.example.com>')

# 获取页面的 HTML 源码
html_source = driver.page_source

# 使用 BeautifulSoup 解析 HTML
soup = BeautifulSoup(html_source, 'html.parser')

# 查找页面中的标题元素
title_element = soup.find('title')

# 输出标题文本
if title_element:
    print('Page Title:', title_element.text.strip())
else:
    print('Title element not found')

# 关闭浏览器
driver.quit()

在这个示例中,我们首先创建了一个 Chrome 浏览器的 WebDriver 实例,然后使用 get() 方法打开了 Example Domain 这个网页。接着,使用 page_source 属性获取了页面的 HTML 源码,并将其传递给 BeautifulSoup 解析。然后,我们使用 BeautifulSoup 的 find() 方法查找页面中的标题元素,并输出标题文本。最后,使用 quit() 方法关闭了浏览器。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

(一)基于IDEA的JAVA基础15

还是先来说一下: Arrays工具类 Arrays是java.util包提供的工具类 提供了操作数组的方法&#xff0c;如排序,查询等。 如排序(升序)使用sort方法 语法: Arrays.sort(数组名)&#xff1b; 还是直接写来看看: public class Test01 { public static void main(String[] args)…

攻防世界12-baby_web

12-baby_web 题目说想想初始页面是哪个&#xff0c;一般都是index.php&#xff0c;然后如题分析即可。 我们在链接后面拼接上/index.php&#xff0c;返回后发现界面又回到了1.php&#xff0c;有可能是重定向。 我们点击检查-网络&#xff0c;发现没有index的请求&#xff0c;…

系统架构最佳实践 -- 供应链系统架构

供应链系统是现代企业管理中不可或缺的一部分&#xff0c;它涉及到从原材料采购到产品销售的整个生产流程。一个高效的供应链系统可以帮助企业实现成本控制、库存优化和客户满意度提升等目标。在本文中&#xff0c;我们将讨论供应链系统的设计与实践。 一、供应链系统设计 业务…

数字乡村创新实践探索农业现代化与乡村振兴新路径:科技赋能农村全面振兴与农民幸福新篇章

随着信息技术的飞速发展&#xff0c;数字乡村成为推动农业现代化与乡村振兴的重要战略举措。科技赋能下的数字乡村创新实践&#xff0c;不仅提升了农业生产的智能化水平&#xff0c;也为乡村治理和农民生活带来了翻天覆地的变化。本文旨在探讨数字乡村创新实践在农业现代化与乡…

数据库数据恢复—Sql Server数据库文件丢失如何恢复数据?

服务器数据恢复环境&#xff1a; 一台安装windows server操作系统的服务器。一组由8块硬盘组建的RAID5&#xff0c;划分LUN供这台服务器使用。 在windows服务器内装有SqlServer数据库。存储空间LUN划分了两个逻辑分区。 服务器故障&初检&#xff1a; 由于未知原因&#xf…

Spring框架中的单例bean是线程安全的吗?

无状态bean&#xff1a; 无状态的Bean的行为不受其内部状态的影响&#xff0c;每次调用都是基于传入的参数进行计算&#xff0c;而不依赖于任何之前的状态。 (例如上面例子&#xff1a;userService是不能修改的&#xff0c;是无状态的bean) 因此&#xff1a; Spring框架中的…

基于51单片机的无线病床呼叫系统设计—LCD1602显示

基于51单片机的无线病床呼叫系统 &#xff08;仿真&#xff0b;程序&#xff0b;原理图&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 1.病人按下按键&#xff0c;LCD1602显示对应的床位号&#xff1b; 2.多人同时呼叫&#xff0c;显示屏同时显示&#xf…

Vitis HLS 学习笔记--优化循环启动间隔(II)

目录 1. 概述 2. 常规矩阵乘法 3. 数据依赖性和内存访问模式 4. 优化循环 5. 总结 1. 概述 Initiation Interval&#xff08;II&#xff09;定义为启动连续操作之间的时间间隔&#xff0c;以时钟周期为单位。低的II是高性能和高资源利用率的关键。 较高的II意味着在单位…

《手把手教你》系列基础篇(八十六)-java+ selenium自动化测试-框架设计基础-Log4j实现日志输出(详解教程)

1.简介 自动化测试中如何输出日志文件。任何软件&#xff0c;都会涉及到日志输出。所以&#xff0c;在测试人员报bug&#xff0c;特别是崩溃的bug&#xff0c;一般都要提供软件产品的日志文件。开发通过看日志文件&#xff0c;知道这个崩溃产生的原因&#xff0c;至少知道触发崩…

java:特殊文件(properties,xml)和日志

特殊文件 txt(文本文件) txt文件是一种纯文本文件,用于存储文本信息 优缺点:txt文件简单易用,可以使用任何文本编辑器打开和编辑,但不支持数据类型和结构,所有信息均用纯文本形式保存 适合简单的配置信息存储 properties文件 properties文件是一种键值对文件,用于存储配置…

2024最新在线工具箱网站系统源码

2024最新在线工具箱网站系统源码 下载地址: 2024最新在线工具箱网站系统源码-JXASP源码网https://www.jxasp.com/think-php/12489.html

数据库世界信息速递-- TIDB 怎么走向世界如何保证稳定性和可靠性(译)

开头还是介绍一下群&#xff0c;如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, Oceanbase, Sql Server等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;&#xff08;…

LeetCode刷题记(三):61~90题

61. 旋转链表 给你一个链表的头节点 head &#xff0c;旋转链表&#xff0c;将链表每个节点向右移动 k 个位置。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], k 2 输出&#xff1a;[4,5,1,2,3]示例 2&#xff1a; 输入&#xff1a;head [0,1,2], k 4 输出&…

C#.net手术麻醉信息系统源码,集成HIS、EMR、LIS、PACS系统

手术麻醉信息系统可以实现手术室监护仪、麻醉机、呼吸机、输液泵等设备输出数据的自动采集&#xff0c;采集的数据能据如实准确地反映患者生命体征参数的变化&#xff0c;并实现信息高度共享&#xff0c;根据采集结果&#xff0c;综合其他患者数据&#xff0c;自动生成手术麻醉…

JavaScript教程(十四)--- 类型化数组

JavaScript 类型化数组 JavaScript 类型化数组是一种类似数组的对象&#xff0c;并提供了一种用于在内存缓冲中访问原始二进制数据的机制。 引入类型化数组并非是为了取代 JavaScript 中数组的任何一种功能。相反&#xff0c;它为开发者提供了一个操作二进制数据的接口。这在操…

SAP软件如何批量修改物料主数据

在SAP/ERP系统日常运维中经常会遇到批量修改物料主数据的业务需求&#xff0c; 遇到这种业务需求可以使用SAP提供的标准的事务代码MM17进行处理。 下面按业务场景介绍下具体的操作步骤 业务场景1 需要将一批物料主数据的采购组字段全部修改为002。 具体操作步骤如下&#…

[漏洞复现]D-Link未授权RCE漏洞复现(CVE-2024-3273)

声明&#xff1a;亲爱的读者&#xff0c;我们诚挚地提醒您&#xff0c;Aniya网络安全的技术文章仅供个人研究学习参考。任何因传播或利用本实验室提供的信息而造成的直接或间接后果及损失&#xff0c;均由使用者自行承担责任。Aniya网络安全及作者对此概不负责。如有侵权&#…

Spring+SpringMVC的知识总结

一:技术体系架构二:SpringFramework介绍三:Spring loC容器和核心概念3.1 组件和组件管理的概念3.1.1什么是组件:3.1.2:我们的期待3.1.3Spring充当组件管理角色(IOC)3.1.4 Spring优势3.2 Spring Ioc容器和容器实现3.2.1普通和复杂容器3.2.2 SpringIOC的容器介绍3.2.3 Spring IOC…

L1-027 出租

下面是新浪微博上曾经很火的一张图&#xff1a; 一时间网上一片求救声&#xff0c;急问这个怎么破。其实这段代码很简单&#xff0c;index数组就是arr数组的下标&#xff0c;index[0]2 对应 arr[2]1&#xff0c;index[1]0 对应 arr[0]8&#xff0c;index[2]3 对应 arr[3]0&…

30、链表-两两交换链表

思路&#xff1a; 放入集合中两两交换&#xff0c;然后再重新构建链表可以解决。但是不是最优方案 第二种方式如下&#xff1a; 代码如下&#xff1a; public ListNode swapPairs(ListNode head) {if (headnull||head.nextnull){return head;}ListNode dummy new ListNode(…