selenium后续!!

小项目案例:实现批量下载网页中的资源

根据15.3.2小节中的返回网页内容可知,用户只有获取了网页中的图片url才可以将图片下载到*在使用selenium库渲染网页后,可直接通过正则表达式过滤出指定的网页图片,从而实现批量下载接下来以此为思路来实现一个小项目案例。

项目任务
实现批量下载人民邮电出版社官网中与Python相关的图书封面图片。

项目实步骤

步骤1,获取人民邮电出版社官网中与Python相关的图书封面图片url。使用get()方法即可获取“python”的图书封面图片url。

步骤2,使用selenium库驱动浏览器渲染网页,并获取染后的网页代码

步骤3,使用正则表达式过滤出图片的ur1。

步骤4,使用15.3.2小节的返回网页内容中的方法将对应ur1的图片下载到本地

项目实现代码

from selenium import webdriverfrom selenium,webdriver chrome,options import optionsimport requestsimport rechrome_options = Options ()chrome_options,binary_location = r"c:\program Files\Google\chrome\Application\chrome.exe"driver = webdriver.Chrome(options=chrome_options)driver.get('https://www.ptpress.com.cn/search?keyword=python')a = re.findall('<img src="(.+?jpg)"></div>',driver.page source)i=1for url in a:r = requests.get(url)f2 = open('.\\Python图书\\'+str(i)+'.jpg','wb')i += 1f2.write(r.content)f2.close()

第4~6行代码绑定了Chrome浏览器,并驱动浏览器
第7行代码使用get()方法打开Python类图书的网页,如图15-36所示。
第8行代码使用正则表达式过滤driver,page_source(渲染后的网页代码)中的图片url。如图15-36所示可以观察到所有图书封面图片的标签为<img>,图片格式为.jpg,且下一个标签为</div>。因此使用正则表达式设计的过滤规则为'<img src="(.+?jpg)"></div>’。过滤规则不是统一的,读者可以自行设计过滤规则。第9~15行代码使用requests库中的get()方法将过滤出来的ur1分别保存到相对路径“\Python图书”下。执行代码后将会自动下载网页中的图书封面图片到本地文件夹“\Python图书”中,如图15-37所示。

此项目案例介绍了一个通用的下载网页资源的方法,读者掌握此方法后即可实现批量下载大部分网站中的图片、音乐、视频等资源文件。

获取和操作网页元素

获取网页中的指定元素

1获取标签中的图片url使用了正则表达式的方式进行过滤,而WebDriver对象中也提供了大量用于获取网页指定元素的方法.

在获取了网页中的某个元素后,可以使用以下方法对此元素进行相应操作。

tag-name()方法:获取元素的名称。
text()方法:获取元素的文本内容。
click()方法:单击此元素。
submit()方法:提交表单。
send_keys()方法:模拟输入信息。
size()方法:获取元素的尺寸。

在元素中输入信息

send_keys()方法可以实现在元素中输入信息,例如在窗口标签中输入信息。其使用形式如下:

send keys(*value)

参数value:表示需要输入的字符串信息。
示例代码(在人民邮电出版社官网的搜索框中输入“Python”):

from selenium import webdriverfrom selenium.webdriver.chrome.options import Optionsfrom selenium.webdriver.common.keys import Keyschrome options = Options()chrome options.binary location = r"c:\Program Files\Google\chrome\Application\chrome.exe"driver = webdriver.Chrome(options=chrome options)driver.get('https://www.ptpress.com.cn/')driver fnd element by tag name ("input").send keys ("Python" )

第8行代码使用find_element_by_tag_name()方法找到标签名为input的元素(通过网页源代码可知搜索框的标签名为input)。获取到标签后使用send_keys()方法实现在搜索框内输入字符串"Python"。

获取元素的方法比较多,读者可按照不同的方法灵活实现。实现在搜索框中输入信息的代码程序后,还可以模拟用户的按键操作,其使用方法为在字符串后面继续增加按键转义字符串信息。

示例代码:

from selenium import webdriverfrom selenium,webdriver,chrome.options import Optionsfrom selenium,webdriver,common.keys import Keyschrome options =Options()chrome_options.binary_location = r"C:\Program Files\Google\chrome\Application\chrome,exe"driver=webdriver.Chrome(options=chrome options)driver.get('https://www.ptpress.com.cn/')driver.find element by tag name("input").send keys ("Python"+ KeyS .RETURN)

示例代码在上二示例代码的基础上只对第8行微了修改。第8行代码在send_keys()方法电行KPyS.RETURN,KeyS RETURN表示技E中谈值来源于第3行代码导入的类Keys,类Kev建。能义了大部分按键的转义字符串。下面展示ySpenium库官方源代码中对类Keys的定义,根据定*司知KeyS.RETURN的值为转义字符串八ue006msend_keys()中写入的字符串信息为"pythoue006"。

类Keys的定义:

Elass Keys (object):
非甘群Set of special keys codes.gn#
NULL = *\ue000'
CANCEL=\ue001'#^控制键
HELP =ue002'
BACKSPACE =\ue003'
BACK SPACE = BACKSPACE
TAB =\ue004'
CLEAR =\ue005'
RETURN =\ue006'ENTER =\ue007'
SHIFT =\ue008'LEFT SHIFT = SHIFTCONTROL =\ue009'LEFT CONTROL=CONTROLALT =\ue00a'LEFT ALT = ALTPAUSE =\ue00b'ESCAPE =\ue00cSPACE =\ue00d'PAGE UP=\ue00e'PAGE DOWN=\ue00f'亻状到篚剁钭滹会盹玀摊跑=\ue010'HOME =\ue011'LEFT =\ue012'ARROW LEFT = LEFTUp ='\ue013'ARROW UP = UPRIGHT =\ue014'ARROW RIGHT = RIGHTDOW =\1e015!INSERT =
DELETE = '\ue017
SEMICOLON =\ue018'
EQUALS =\ue019'
#数字键NUMPAD0 =\ue0la'
NUMPAD1 =\ue01b'
NUMPAD2=\ue0lc
NUMPAD3=\ue0ld'
NUMPAD4= \ue0le'
NUMPAD5\ue0lf
NUMPAD6'\ue020'三
NUMPAD7 =\ue021'
NUMPAD8=\ue022'
NUMPAD9 =\ue023'
MULTIPLY =\ue024
ADD =\ue025'
SEPARATOR =ue026
SUBTRACT =\ue027'
DECIMAL =\ue028
DIVIDE =\ue029
F1 =\ue031'#功能键
F2 =ue032'
F3 =\ue033'
F4=\ue034'
F5 =\ue035'
F6 = \ue036'
F7 =\ue037'
F8=\ue038'
F9=\ue039'
F10 =\ue03a'
F11 =\ue03b'
F12 =\ue03c'
META =\ue03d'
COMMAND=\ue03d'

小项目案例:实现上传图片

项目任务泰现在百度识图官网中上传一张图片
项目实现代码

from selenium import webdriver
from selentan wendrtyer chrome,options import optlons
chrome_options = options()
crome options binary_location = r"c:\program fileslGoogleichromevpplleationichrome.exe
driver = webdriver,chrome (options=chrome optint)
driver.get('百度识图主页的网址”
input element = driver.find element by _name('file,)
input element.send_keys(r":\书代码\识图,jP)

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

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

相关文章

深度解析Linux文件I/O三级缓冲体系:用户缓冲区→标准I/O→内核页缓存

在Linux文件I/O操作中&#xff0c;缓冲区的管理是一个核心概念&#xff0c;主要涉及用户空间缓冲区和内核空间缓冲区。理解这两者的区别和工作原理对于高效的文件操作至关重要。 目录 一、什么是缓冲区 二、为什么要引入缓冲区机制 三、三级缓冲体系 1、三级缓冲体系全景图…

【每日算法】专题十三_队列 + 宽搜(bfs)

1. 算法思路 BFS 算法核心思路 BFS&#xff08;广度优先搜索&#xff09;使用 队列&#xff08;Queue&#xff09;按层级顺序遍历图或树的节点。以下是 C 实现的核心思路和代码模板&#xff1a; 算法框架 #include <queue> #include <vector> #include <un…

【动手实验】发送接收窗口对 TCP传输性能的影响

环境准备 服务器信息 两台腾讯云机器 t04&#xff08;172.19.0.4&#xff09;、t11&#xff08;172.19.0.11&#xff09;&#xff0c;系统为 Ubuntu 22.04&#xff0c;内核为 5.15.0-139-generic。默认 RT 在 0.16s 左右。 $ ping 172.19.0.4 PING 172.19.0.4 (172.19.0.4) …

28、鸿蒙Harmony Next开发:不依赖UI组件的全局气泡提示 (openPopup)和不依赖UI组件的全局菜单 (openMenu)、Toast

目录 不依赖UI组件的全局气泡提示 (openPopup) 弹出气泡 创建ComponentContent 绑定组件信息 设置弹出气泡样式 更新气泡样式 关闭气泡 在HAR包中使用全局气泡提示 不依赖UI组件的全局菜单 (openMenu) 弹出菜单 创建ComponentContent 绑定组件信息 设置弹出菜单样…

让老旧医疗设备“听懂”新语言:CAN转EtherCAT的医疗行业应用

在医疗影像设备的智能化升级中&#xff0c;通信协议的兼容性常成为工程师的“痛点”。例如&#xff0c;某医院的移动式X射线机采用CAN协议控制机械臂&#xff0c;而主控系统基于EtherCAT架构。两者协议差异导致数据延迟高达5ms&#xff0c;影像定位精度下降&#xff0c;甚至影响…

ubuntu基础搭建

ubuntu上docker的搭建 https://vulhub.org/zh 网站最下面找到开始使用&#xff0c;有搭建的命令//安装docker&#xff0c;连接失败多试几次 curl -fsSL https://get.docker.com | sh //验证Docker是否正确安装&#xff1a; docker version //还要验证Docker Compose是否可用&am…

动态规划 + DFS + 记忆化!Swift 解 LeetCode 329 的实战笔记

文章目录摘要描述题解答案题解代码分析代码解析示例测试及结果时间复杂度空间复杂度总结摘要 这篇文章带你用 Swift 实战一道非常经典的 DFS 记忆化搜索题目 —— LeetCode 329《矩阵中的最长递增路径》。看似一个简单的“走格子”游戏&#xff0c;实则考察了搜索顺序、剪枝策…

046_局部内部类与匿名内部类

一、局部内部类&#xff08;Local Inner Class&#xff09; 1.1 定义与基本概念 局部内部类是定义在方法、构造器或代码块内部的类&#xff0c;其作用域仅限于所在的局部范围&#xff08;定义它的方法、构造器或代码块&#xff09;&#xff0c;超出该范围则无法访问。 它的核心…

Jenkins Pipeline 中使用 JsonSlurper 报错:cannot find current thread

Jenkins Pipeline 中使用 JsonSlurper 报错&#xff1a;cannot find current thread&#x1f31f; 背景⚠ 问题重现&#x1f9e0; 原因解析&#xff1a;CPS 与非 CPS 安全方法冲突✅ 解决方案一&#xff1a;使用 NonCPS 注解&#xff08;经典方案&#xff09;✅ 解决方案二&…

Go 语言循环语句详解

Go 语言循环语句详解 在编程语言中&#xff0c;循环语句是实现重复执行某些代码块的关键元素。Go 语言作为现代编程语言之一&#xff0c;提供了多种循环结构来满足不同的编程需求。本文将详细讲解 Go 语言中的循环语句&#xff0c;包括 for、while 和 goto 语句&#xff0c;帮助…

day30——零基础学嵌入式之进程间通信1.0

一、进程间通信7种方式1.传统的进程间通信方式&#xff08;1&#xff09;管道①无名管道&#xff1a;②有名管道&#xff1a;&#xff08;2&#xff09;③信号&#xff08;3&#xff09;system Ⅴ 》系统Ⅴ 进程间通信方式 inner Process Comunication④共享内存 &#xff…

408考研逐题详解:2010年第33题——网络体系结构

2010年第33题 下列选项中&#xff0c;不属于网络体系结构所描述的内容是&#xff08; &#xff09; A. 网络的层次 \qquad B. 每层使用的协议 \qquad C. 协议的内部实现细节 \qquad D. 每层必须完成的功能 解析 本题属于计算机网络基础知识的范畴&#xff0c;考查网络体系结构…

VR 远程系统的沉浸式协作体验​

在传统的远程协作中&#xff0c;团队成员往往通过二维的视频画面进行交流&#xff0c;这种方式虽然能实现基本的沟通&#xff0c;但缺乏真实感和互动性。而 VR 远程系统的出现&#xff0c;彻底改变了这一局面。戴上 VR 设备&#xff0c;员工们仿佛置身于同一个真实的办公室空间…

记录DataGrip 2025.1.3破解失败后,无法重启问题修复

记录DataGrip 2025.1.3破解失败后&#xff0c;无法重启问题修复安装过程复盘异常场景解决方式总结安装过程 在官网下载了最新版本2025.1.3。安装成功后&#xff0c;使用30天试用方式&#xff0c;打开datagrip。 复盘异常场景 网上搜索破解教程进行破解。找了一个需要现在ja…

私有服务器AI智能体搭建配置选择记录

在搭建私有服务器上的AI智能体时&#xff0c;需要从多个方面进行选择和规划&#xff0c;以确保系统性能、安全性、可扩展性等方面满足需求。1. 硬件选择 服务器配置&#xff1a; CPU&#xff1a;选择高性能多核CPU&#xff08;如Intel Xeon或AMD EPYC系列&#xff09;&#xff…

SDC Specical check setting的描述 - false path

在上一篇文中描述了SDC的基本语法&#xff0c;其中关于时序异常约束并没有进行详细的描述&#xff0c;但是在正常的设计中&#xff0c;一般这种异常的设置反而是需要特别关注的&#xff0c;主要包括&#xff1a;1. 虚假路径- false path不需要满足任何时序要求的路径&#xff1…

【Python练习】048. 编写一个函数,实现简单的命令行接口,接受用户输入并响应

048. 编写一个函数,实现简单的命令行接口,接受用户输入并响应 在 Python 中,可以通过 input() 函数创建一个简单的命令行接口,接受用户输入并根据输入内容进行响应。 示例代码 def simple_command_line_interface():"""实现一个简单的命令行接口,接受用…

软件工厂语境下的知识系统选型:兼顾合规性与集成深度

在过去几十年间&#xff0c;制造业从“工匠手作”迈向“工业流水线”&#xff0c;完成了生产效率的巨大飞跃。当软件开发也面临交付复杂性、合规要求与协作成本不断上升的现实&#xff0c;“软件工厂”的理念逐步兴起。 在这场“开发现代化”的转型中&#xff0c;知识管理被重新…

C语言-一维数组,二维数组

数组 数组的引入如果要在程序中保存一个人的年龄&#xff1f;如何保存&#xff1f; 答&#xff1a;创建一个基于int类型的变量&#xff0c;举例&#xff1a;int age 22如果要在程序中保存一个人的三门课的成绩&#xff1f;如何保存&#xff1f; 答&#xff1a;创建三个基于flo…

如何区别HTML和HTML5?

要区分 HTML&#xff08;通常指 HTML4 及更早版本&#xff09;和 HTML5&#xff0c;主要可以从以下关键方面进行比较&#xff1a;一、文档声明区别 <!-- HTML4 文档声明 --> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http:/…