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 webdriver

 from selenium,webdriver chrome,options import options

import requests

import re

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/search?keyword=python')

 a = re.findall('<img src="(.+?jpg)"></div>',driver.page source)

i=1

for url in a:

        r = requests.get(url)

        f2 = open('.\\Python图书\\'+str(i)+'.jpg','wb')

        i += 1

        f2.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 webdriver

from selenium.webdriver.chrome.options import Options

from selenium.webdriver.common.keys import Keys

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

driver fnd element by tag name ("input").send keys ("Python" )

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

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

示例代码:

复制代码
from selenium import webdriver

from selenium,webdriver,chrome.options import Options

from selenium,webdriver,common.keys import Keys

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

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)

相关推荐
释槐鸟~31 分钟前
还不知道RIDE工具怎么装吗
测试工具·自动化
有技巧搬砖18 小时前
为什么锂电池组的电池老化测试很重要?
测试工具·锂电池·电池老化
蒲公英内测分发21 小时前
智能手表卖出去后,包装、说明书和官网里的 App 下载入口怎么统一?
前端·人工智能·测试工具·智能家居·智能硬件·智能手表
蒲公英内测分发1 天前
智能手环出海测试,海外合作方分散在不同国家,Android 测试包怎么持续分发和更新?
android·前端·人工智能·测试工具·智能手表
无语的小歪歪1 天前
ATF 智测 1.0
python·测试工具·集成测试
SHENGWEI胜为2 天前
交换机端口显示正常,终端却获取不到 IP 地址?从 DHCP 流程定位故障
服务器·网络·测试工具·缓存·通信工程
xie881018022 天前
长表格跨页重复表头:排版上的做法
测试工具
老孟说禅2 天前
测试工具示波器的使用
测试工具
步行cgn3 天前
为什么使用接口测试工具?
测试工具
P1Browser3 天前
Puppeteer 与 Selenium 技术对比:多账号自动化管理如何做环境隔离?
selenium·测试工具·自动化