selenium完整版一览

selenium 库驱动浏览器

selenium库是一种用于Web应用程序测试的工具,它可以驱动浏览器执行特定操作,自动按照脚本代码做出单击、输入、打开、验证等操作,支持的浏览器包括IE、Firefox、Safari、Chrome、Opera等。而在办公领域中如果经常需要使用浏览器操作某些内容,就可以使用selenium库来实现,例如将大量数据上传到网页中或者实现自动驱动浏览器进行操作。

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

使用 selenium 库前的准备

了解 selenium 库驱动浏览器的原理

浏览器是在浏览器内核基础之上开发而成的,测览器内核主要负责对网页语法进行哪释并谊类(显示)网洲如360浏览器和Chr0me浏览器都使用Chrome内核,如图15-26阳图15-27所示;丽QQ洲览器使用1E内m.,safari浏览器使用Webkit内核

然浏览器内核可以被selenium库驱动,但还是需要安装对应版本的测览器内核驱动程序,以便于控制web浏览器的行为。每个浏览器都有一个特定的用于支持测览器运行的WebDriver,被称为驱动程序(可以进入selenium库的官网进行下载,如果下载失败或无法匹配版本,还可以尝试下面介绍的相关方法)。

安装 WebDriver

这里以Chrome浏览器为例,开始介绍安装浏览器内核驱动程序WebDriver的方法。针对Chrome浏览器的WebDriver可以进入专用下载通道进行下载,如图15-28所示。根据图15-27可知Chrome浏览器的内核版本为91.0.4472.124,读者可能会找不到版本号完全相同的WebDriver,但也可以使用与浏览器版本最为接近的版本,例如本书中下载的WebDriver的版本为91.0.4472.101。
选择并单击“91.0.4472.101”后将进入如图15-29所示的驱动程序安装包页面,Linux操作系统选择chromedriver_linux64.zip”,macOS操作系统选择“chromedriver_mac64.zip”,macOS操作系统(m1芯片)选择“chromedriver_mac64_m1.zip”,Windows操作系统选择“chromedriver_win32.zip”

下载完成后还需要解压相应文件,并将解压后的文件中的chromedriver,exe文件移动到Python安装目录路径下的Scripts文件夹中。Pvthon安装目录路径的确定方法分为两种情况,对于Windows系统来说,在命令装示符窗口中输入命令wbere-python并按Enter键即可获取Python的安装目录路径。对于macOS系统来说金终端物入命令mhieh pythen3并按Enter键即可获取Python安装目录路径。以Windows系统为例,最终结*果如图15-30所示。至此即完成了所有关于WebDriver的配置。

安装selenium 库

在命令提示符窗口或终端中执行以下命令:

pip install selenium

安装成功后可使用以下命令查看库的信息:

pip show selenium

完成了整个selenium库的安装及WebDriver的配置后,便可以开始使用selenium库中的方法调用

WebDriver驱动浏览器执行相应操作。

驱动浏览器

selenium库支持的浏览器包括Chrome、IE 7~11、Firefox、Safari、Opera Edge、HtmlUnit、PhantomJS等,几乎覆盖了当前计算机端和手机端的所有类型的浏览器。在selenium库源代码文件下的webdriver中可查看所有支持的浏览器类型

webdriver的使用形式如下:

webdriver.浏览器类型名()

浏览器类型名与图15-31中对应浏览器类型的文件夹名称相同。例如驱动Chrome浏览器的使用方法为webdriver.Chrome(),驱动Opera浏览器的使用方法为webdriver.opera()。图15-31所示的每个文件夹中都存在一个webdriver,py文件,当调用webdriver.Chrome()时,会默认调用chrome\webdriver.py文件中的类WebDriver。webdriver.Chrome()的使用形式如下:

webdriver.Chrome(executable path ="chromedriver",port = 0,options = None)

功能:创建一个新的Chrome浏览器驱动程序。

参数executable-path:表示浏览器的驱动路径,默认为环境变量中的path,通常计算机中可能存在多个浏览器软件,当没有在环境变量中设置浏览器path时,可以使用参数options。
参数port:表明希望服务运行的端口,如果保留为0,驱动程序将会找到一个空闲端口。

参数options:表示由类Options(位于selenium\webdriver\chrome\options.py)创建的对象,用于实现浏览器的绑定。

示例代码(驱动Chrome浏览器):

from selenium import webdriver

from selenium.webdriver.chrome.options import Options

chrome_options = Options()

chrome_options,binary_location = r"c:\Program files\Google\chrome\Application\chrome.exe"

driver =webdriver.Chrome(options=chrome options)

第3、4行代码使用类Options创建了一个对象chrome_options,使用binary_location()方法绑定了浏览器。
第5行代码使用webdriver.Chrome()设置options参数值为绑定Chrome浏览器的对象chrome_options,执行代码后将会自动打开Chrome浏览器,实现驱动浏览器的第一步。

加载网页

使用类webdriver.Chrome创建的驱动浏览器对象中包含大量操作浏览器的方法,类webdriver.Chrome继承于基础类WebDriver,该类位于selenium库的webdriver\remotewebdriver.py文件中。

类WebDriver的简洁定义:

class WebDriver(object):

        def file detector context(self,file detector class, *args,**kwargs): ...

        #覆盖当前文件检测器,文件检测器由方法Fi1e_detector创建
def name(self):...#返回浏览器的名称
def start_client(self):...#启动客户端
def stop_client(self):...#关闭客户端
def start session(self,capabilities,browser_profile=None):...

        #创建一个具有特定功能的新会话

        def create_web element(self,element_id):.,,#用指定的element_id创建一个web元素

        def execute(self,driver_command,params=None):...#执行JavaScript脚本程序

        def get(self,ur1):...#在当前浏览器会话中加载网页

等等,等等

接下来介绍两种常用的加载浏览器网页的方法。

1种,get()方法。get()方法用于打开指定的网页。其使用形式如下

get (url)

功能:在当前浏览器会话中加载url指向的网页。
示例代码(加载人民邮电出版社官网中的期刊页):

from selenium import webdriver

from selenium.webdriver.chrome.options import options

chrome_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//periodical')

第6行代码使用get()方法加载人民邮电出版社官网的期刊页,执行代码后将会自动启动Chrome浏览器并加载出相应网页

第2种,execute_script()方法。executescript()方法用于打开多个标签页,即在同一浏览器中打开多个网页。其使用形式如下:

execute script(script,*args)

功能:打开标签页,同步执行当前页面中的JavaScript脚本。JavaScript是网页中的一种编程语言。

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

示例代码(打开多个标签页):

from selenium import webdriver

from selenium.webdriver.chrome.options import Options

chrome options = Options()
chrome_options binary location = r"c:\program Files\Google\chrome\Application\chrome.ex

driver =webdriver.chrome(options=chrome_options)

driver.get ('https://www.ptpress.com.cn/')

driver,execute script("window,open('https: //www.ptpress.com.cn/login','_blank');")

dxiver.execute script ("window,open('https://www,shuyishe,com/','_blank');")
dtiver,execute script ("window,open('https://www,shuyishe.com/course',’ blank');")

第7~9行代码使用execute_script()方法执行括号中的JavaScript脚本,打开的新标签页分别为人民邮电出版社登录页面、数艺设的主页、数艺设的课程页面

获取渲染后的网页代码

通过get()方法获取浏览器中的网页资源后,浏览器将自动渲染网页源代码内容,并生成渲染后的的时使用page_source()方法即可获取渲染后的网页代码。

示例代码:

from selenium import webdriver

from selenium.webdriver.chrome.options import Options

chrome 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/')

print(driver.page source)

第7行代码使用driver对象中的pagesource()方法获取被get()方法获取到的渲染后的网页源代码。

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

根据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.pswp.cn/bicheng/98141.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/98141.shtml

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

相关文章

[Linux]学习笔记系列 -- lib/kfifo.c 内核FIFO实现(Kernel FIFO Implementation) 高效的无锁字节流缓冲区

文章目录lib/kfifo.c 内核FIFO实现(Kernel FIFO Implementation) 高效的无锁字节流缓冲区历史与背景这项技术是为了解决什么特定问题而诞生的&#xff1f;它的发展经历了哪些重要的里程碑或版本迭代&#xff1f;目前该技术的社区活跃度和主流应用情况如何&#xff1f;核心原理与…

MFC_Install_Create

1. 安装MFC 编写MFC窗口应用程序需要用到Visual Studiohttps://visualstudio.microsoft.com/zh-hans/&#xff0c;然后安装&#xff0c;要选择使用C的桌面开发&#xff0c;再点击右边安装详细信息中的使用C的桌面开发&#xff0c;往下滑&#xff0c;有一个适用于最新的v143生成…

Langchain4j开发之AI Service

学习基于Langchain4j的大模型开发需要学习其中Ai Service的开发模式。里面对大模型做了一层封装&#xff0c;提供一些可以方便调用的api。其中有两种使用Ai Service的方式。一.编程式开发1.首先引入Langchain4的依赖。<dependency><groupId>dev.langchain4j</gr…

认识神经网络和深度学习

什么是神经网络&#xff1f;什么又是深度学习&#xff1f;二者有什么关系&#xff1f;……带着这些疑问&#xff0c;进入本文的学习。什么是神经网络神经网络&#xff08;Neural Network&#xff09;是一种模仿生物神经系统&#xff08;如大脑神经元连接方式&#xff09;设计的…

医疗行业安全合规数据管理平台:构建高效协作与集中化知识沉淀的一体化解决方案

在医疗行业中&#xff0c;数据不仅是日常运营的基础&#xff0c;更是患者安全、服务质量和合规管理的核心载体。随着医疗业务的复杂化和服务模式的多元化&#xff0c;各类机构——从大型医院到科研中心——都面临着海量文档、报告、影像资料和政策文件的管理需求。这些资料往往…

Day25_【深度学习(3)—PyTorch使用(5)—张量形状操作】

reshape() squeeze()unsqueeze()transpose()permute()view() reshape() contiguous() reshape() 一、reshape() 函数保证张量数据不变的前提下改变数据的维度&#xff0c;将其转换成指定的形状。def reshape_tensor():data torch.tensor([[1, 2, 3], [4, 5, 6]])print(data…

第十八篇 开发网页教学:实现画布、绘画、简易 PS 方案

在网页开发领域&#xff0c;画布功能是实现交互创作的重要基础&#xff0c;无论是简单的绘画工具&#xff0c;还是具备基础修图能力的简易 PS 方案&#xff0c;都能为用户带来丰富的视觉交互体验。本篇教学将围绕 “学习 - 实践 - 实操” 的核心思路&#xff0c;从技术原理讲解…

封装形成用助焊剂:电子制造“隐形桥梁”的技术突围与全球产业重构

在5G通信、人工智能、新能源汽车等新兴技术驱动下&#xff0c;全球电子制造业正以年均6.8%的增速重构产业链。作为电子元件焊接的核心辅料&#xff0c;封装形成用助焊剂&#xff08;又称电子封装用助焊剂&#xff09;凭借其“优化焊接质量、提升可靠性、降低制造成本”的核心价…

【完整源码+数据集+部署教程】零件实例分割系统源码和数据集:改进yolo11-GhostHGNetV2

背景意义 研究背景与意义 随着工业自动化和智能制造的迅速发展&#xff0c;零件的高效识别与分割在生产线上的重要性日益凸显。传统的图像处理方法在处理复杂场景时往往面临着准确性不足和实时性差的问题&#xff0c;而深度学习技术的引入为这一领域带来了新的机遇。特别是基于…

墨色规则与血色节点:C++红黑树设计与实现探秘

前言​ 前几天攻克了AVL树&#xff0c;我们已然是平衡二叉树的强者。但旅程还未结束&#xff0c;下一个等待我们的&#xff0c;是更强大、也更传奇的**终极BOSS**——红黑树。它不仅是map和set的强大心脏&#xff0c;更是C STL皇冠上的明珠。准备好了吗&#xff1f;让我们一…

大数据时代时序数据库选型指南:为何 Apache IoTDB 成优选(含实操步骤)

在数字经济加速渗透的今天&#xff0c;工业物联网&#xff08;IIoT&#xff09;、智慧能源、金融交易、城市运维等领域每天产生海量 “带时间戳” 的数据 —— 从工业设备的实时温度、电压&#xff0c;到电网的负荷波动&#xff0c;再到金融市场的每秒行情&#xff0c;这类 “时…

MAZANOKE+cpolar让照片存储无上限

文章目录前言1. 关于MAZANOKE2. Docker部署3. 简单使用MAZANOKE4. 安装cpolar内网穿透5. 配置公网地址6. 配置固定公网地址总结当工具开始理解用户的需求痛点时&#xff0c;MAZANOKE与cpolar这对搭档给出了“轻量化”的解决方案。它不追求浮夸的功能堆砌&#xff0c;却用扎实的…

正则表达式 - 元字符

正则表达式中的元字符是具有特殊含义的字符&#xff0c;它们不表示字面意义&#xff0c;而是用于控制匹配模式。基本元字符. (点号)匹配除换行符(\n)外的任意单个字符示例&#xff1a;a.b 匹配 "aab", "a1b", "a b" 等^ (脱字符)匹配字符串的开始…

suricata源码解读-事务日志

注册事务日志线程模块 void TmModuleTxLoggerRegister (void) {tmm_modules[TMM_TXLOGGER].name "__tx_logger__";tmm_modules[TMM_TXLOGGER].ThreadInit OutputTxLogThreadInit;tmm_modules[TMM_TXLOGGER].Func OutputTxLog;tmm_modules[TMM_TXLOGGER].ThreadExi…

【CSS】层叠上下文和z-index

z-index 的作用范围受“层叠上下文&#xff08;stacking context&#xff09;”影响。&#x1f539; 1. z-index 的基本作用 控制元素在 同一个层叠上下文&#xff08;stacking context&#xff09; 内的堆叠顺序。值越大&#xff0c;显示层级越靠上。&#x1f539; 2. 什么是层…

自动化脚本的降本增效实践

一、自动化脚本的核心价值自动化脚本通过模拟人类操作完成重复性任务&#xff0c;其核心价值体现在三个维度&#xff1a;首先&#xff0c;在时间成本方面&#xff0c;标准化的数据处理流程可缩短90%以上的操作耗时&#xff1b;其次&#xff0c;在人力成本上&#xff0c;单个脚本…

【C语言】第七课 字符串与危险函数​​

C语言中的字符串处理既是基础&#xff0c;也是安全漏洞的重灾区。理解C风格字符串的底层原理及其危险函数的运作方式&#xff0c;对于编写安全代码和进行逆向工程分析至关重要。 &#x1f9e9; C风格字符串的本质 C风格字符串本质上是以空字符\0&#xff08;ASCII值为0&#xf…

Mac安装hadoop

1.在terminal中检查是否安装brew命令 brew --version 如果没有安装&#xff0c;在terminal中执行命令&#xff0c;安装brew /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" 安装完成后&#xff0c;再重新打…

多语言编码Agent解决方案(4)-Eclipse插件实现

Eclipse插件实现&#xff1a;支持多语言的编码Agent集成 本部分包含Eclipse插件的完整实现&#xff0c;包括多语言支持、命令注册、API调用和UI集成。插件使用Java开发&#xff0c;基于Eclipse Plugin Development Environment (PDE)。 1. Eclipse插件目录结构 eclipse-plugin/…

风险规则引擎-RPA 作为自动化依赖业务决策流程的强大工具

机器人流程自动化&#xff08;RPA&#xff09;听起来好像跟机器人统治世界似的&#xff0c;但其实不是那么回事。RPA 就是一套能在电脑上运行的程序&#xff0c;能快速、高效地自动完成日常重复的工作。RPA 让你能够设置一些软件“机器人”来执行特定的任务。RPA 的一个大好处就…