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

Python网络爬虫之selenium库

目录

一.使用selenium库前的准备

1. 安装浏览器内核驱动程序

2.安装selenium库

二.用selenium库驱动浏览器

两种常用的加载浏览器网页的方法

1.get()方法

2.execute_script()方法

3.获取渲染后的网页代码

  4.获取网页中的指定元素

5.在元素中输入信息

6.更多操作

①模拟点击

②WebDriver对象中的方法

7.不启动浏览器获取网页资源


与requests库不同,selenium库是基于浏览器的驱动程序来驱动浏览器执行操作的,且浏览器可以实现网页源代码的渲染,因此selenium库可以轻松获取网页中渲染后的数据信息

一.使用selenium库前的准备

1. 安装浏览器内核驱动程序

  • 不同浏览器需要对应的驱动程序
  • 判断驱动程序需先确认浏览器内核版本
  • 下载驱动时需选择与浏览器内核版本完全一致或最接近的版本
  • 驱动文件需解压后放置到Python安装路径下的Scripts目录(如C:\Users\用户名\AppData\Local\Programs\Python\Python307\Scripts)。
  • 建议同时在Python根目录下备份驱动文件,防止因浏览器自动更新导致版本不兼容。
  • 驱动更新需及时同步,避免因浏览器版本升级导致代码无法运行

以Edge浏览器为例子

搜索edge浏览器内核驱动程序下载:

下载解压完成后:

这样我们的浏览器内核驱动器就安装完成了

2.安装selenium库

pip install selenium -i 镜像源地址

二.用selenium库驱动浏览器

以edge浏览器为例,打开淘宝页面

# 导入Selenium库中的webdriver模块
# webdriver是Selenium的核心组件,用于控制浏览器执行各种操作(如打开网页、点击按钮等)
from selenium import webdriver# 导入Edge浏览器的配置选项类
# Options类用于自定义Edge浏览器的启动参数(如设置浏览器路径、无头模式、窗口大小等)
from selenium.webdriver.edge.options import Options# 创建Edge浏览器的配置对象
# 通过该对象可以设置浏览器的各种启动属性
edge_options = Options()# 指定Edge浏览器的可执行文件路径
# 当系统中Edge浏览器安装路径非默认位置时,需要手动指定其exe文件路径,否则可能导致启动失败
edge_options.binary_location = r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"# 基于配置对象初始化Edge浏览器驱动实例
# 这一步会启动一个真实的Edge浏览器窗口,后续所有操作都将在该窗口中执行
driver = webdriver.Edge(options=edge_options)# 调用浏览器驱动的get方法,打开指定的网页(此处为淘宝首页)
# 执行后,浏览器会自动加载并显示该URL对应的页面内容
driver.get("http://www.taobao.com")

代码运行后将会自动打开浏览器的淘宝页面:

注意:上述的地址应是自己浏览器的所在位置

两种常用的加载浏览器网页的方法

1.get()方法

get()方法用于打开指定的网页但打开的是新页面

2.execute_script()方法

execute_script()方法用于打开多个标签页,即在同一浏览器中打开多个页面,但必须先用get()方法打开一个页面

execute_script(script,*args)

参数script:将要执行的脚本内容,数据类型为字符串类型。使用JavaScript语言实现打开一个新标签页的使用形式为"window.open('网站url','_blank');"

from selenium import webdriver
from selenium.webdriver.edge.options import Options
edge_options = Options()
edge_options.binary_location=r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"
driver = webdriver.Edge(options=edge_options)
driver.get("http://www.taobao.com")
driver.execute_script("window.open('https://www.ptpress.com.cn/','_blank');")
driver.execute_script("window.open('https://bbs.csdn.net/?spm=1002.2000.3001.6068','_blank');")

3.获取渲染后的网页代码

使用 driver.page_source 获取浏览器渲染后的网页源代码(含动态加载内容图片音频等)。

优势:自动渲染,避免被反爬机制检测(模拟真实浏览器行为)。

import requests
import re
from selenium import webdriver
from selenium.webdriver.edge.options import Options
edge_options = Options()
edge_options.binary_location=r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"
driver = webdriver.Edge(options=edge_options)
driver.get("https://www.ptpress.com.cn/search?keyword=c++&jc=")
print(driver.page_source)

  4.获取网页中的指定元素

我们可以使用正则表达式的方法进行过滤来获取我们想要的元素,而WebDriver对象中也提供了大量用于获取指定网页元素的方法

driver.find_element(self, by=By.  , value=" ")

返回的元素不止一个则用find_elements()方法,参数不变

我们可以在By.后面填写如下的属性ID,NAME等,value中则填写在需要爬取的网页中的对应属性的信息

class By(object):"""Set of supported locator strategies."""ID = "id"XPATH = "xpath"LINK_TEXT = "link text"PARTIAL_LINK_TEXT = "partial link text"NAME = "name"TAG_NAME = "tag name"CLASS_NAME = "class name"CSS_SELECTOR = "css selector"

如下演示找到百度识图中的上传图片对应的元素

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.edge.options import Optionsedge_options = Options()
edge_options.binary_location=r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"
driver = webdriver.Edge(options=edge_options)
driver.get(r"https://graph.baidu.com/pcpage/index?tpl_from=pc")
t_element = driver.find_element(by=By.NAME,value='file')

5.在元素中输入信息

driver.find_element(...).send_keys(输入的字符串信息)

我们用send_keys()方法实现在元素中传递信息

例如在搜索框输入信息python,浏览器会自动输入不用我们手动输入

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.edge.options import Options
edge_options = Options()
edge_options.binary_location=r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"
driver = webdriver.Edge(options=edge_options)
driver.get("https://www.ptpress.com.cn/")
driver.find_element(By.TAG_NAME,value='input').send_keys("python")

补充:如果我们将最后一个方法参数添加Keys.RETURN即send_keys("python"+Keys.RETURN)则表示输入信息后按下enter键

6.更多操作

①模拟点击

获取网页元素后可以使用click()方法实现点击该元素

driver.find_element(...).click()
②WebDriver对象中的方法

back() :返回到上一个页面

forward():前进到下一个页面

refresh():刷新当前页面

quit():关闭当前浏览器

close():关闭当前标签页

7.不启动浏览器获取网页资源

在驱动浏览器时,可以设置无窗口模式,即驱动浏览器后并不会打开浏览器窗口,而是将网页代码在内存中处理,类Options中的add_argument()方法即可实现不启动浏览器的情况下获取网页资源

写下参数--headless即表明不启动浏览器窗口

Options().add_argument('--headless')

http://www.dtcms.com/a/286566.html

相关文章:

  • 第九章 基础设施更新工程
  • 语音控制操作板:人机交互的未来趋势
  • 企业级异常处理方案:Spring Boot自定义异常全局拦截实战
  • 多线程的认识
  • 深入Java注解:从内置到元注解与自定义实战指南
  • 变量提升知识总结
  • 前后端数据交互,关于表单数据传输问题
  • 图机器学习(11)——链接预测
  • Linux和git常用命令
  • TF-IDF(Term Frequency - Inverse Document Frequency)
  • RFID技术赋能智慧物流:实现搬运环节的精准化与高效化
  • 【PTA数据结构 | C语言版】多叉堆的上下调整
  • 【LeetCode 2163. 删除元素后和的最小差值】解析
  • 上市公司-企业超额商誉数据(2005-2023年)-实证数据
  • 《C++继承深度引擎:从内存布局到多态全景拆解》​
  • 飞算科技:以创新科技引领数字化变革,旗下飞算 JavaAI 成开发利器
  • Linux Master 知识库 —— 致 Linux 系统工程师
  • 通信算法之294:LTE系统中的整数倍频偏估计
  • 太阳辐射监测站:洞察太阳能量的科技之眼
  • 【软件系统架构】系列七:系统性能——路由器性能深入解析
  • 告别宕机!Ubuntu自动重启定时任务设置(一键脚本/手动操作)
  • [Raspberry Pi]如何將無頭虛擬顯示器服務(headless display)建置在樹莓派的Ubuntu桌面作業系統中?
  • 汽车免拆诊断案例 | 07款丰田Hilux启动故障
  • Redis——MoreKey
  • 深入理解进程地址空间:虚拟内存与进程独立性
  • nodeJs笔记(六)
  • Ubuntu系统下交叉编译Android的X265库
  • 【leetcode】3202. 找出有效子序列的最大长度(2)
  • 联合利华发起TRO维权行动,OUAI商标或引发跨境圈大批量冻结
  • 密码学基础概念详解:从古典加密到现代密码体系