基础用法"/>
Selenium基础用法
目录
一.概念和自己的理解
二.安装
三. 浏览器驱动
四.正真的基础上场
1.先要打开浏览器,打不开,我们后面也就做不了,万事开头先有前提
2.获取元素的方法
3.操作元素
4.浏览器操作
5.鼠标操作
6.键盘操作
7.下拉框操作
8.页面滚动
9.警告框处理
10.切换frame
11.切换窗口
12.截图
14.最后一个等待,终于要结束了
五.最终小结 最后有惊喜
一.概念和自己的理解
概念:是一个用于web程序测试的工具,中文:晒
自己的理解:其实就是利用各种元素对网页程序进行操作,用自动操作替代了人的手工操作,如果对网页操作的情况下,手工和自动操作起来没什么区别的本质,建议还是手工操作,谁也不想写代码。
二.安装
小伙伴们既然都开始做selenium了,自然PyCharm还有环境搭建,配置环境变量都已经下载好配置好了,这些我就不多讲了,要是这些还没弄好的话上b站上找找python安装视频,跟着来就行了。
第一步:创建好新项目,点击终端Terminal
第二步:在终端输入pip install selenium,点击回车就ok了
拓展知识:
删除selenium:pip uninstall selenium
查看selenium的版本以及其他信息:pip show selenium
三. 浏览器驱动
这个非常重要,没有驱动的话就没有效果。
我自己理解的传输流程:selenium脚本写好传给浏览器驱动driver 一个请求,然后由driver给浏览器下达指令,浏览器就知道该干什么,浏览器执行完返回一个结果到driver,再由driver把结果传给python。
每个浏览器的驱动都不一样,并且驱动下载的版本一定要和浏览器的版本对应,下面是谷歌driver的下载地址,别的浏览器小伙伴们自己找吧
谷歌driver镜像地址
现在我这的最新版本是99,99后面的小数都是大版本里迭代的小版本
大部分小伙伴的电脑应该都是windows系统吧,那就选win32,64位的也选32,都是兼容的,不用的担心。
linux就选linux。Mac有两种,如果你的处理器为M1就选M1的,不是就选另一个
有两种使用驱动的方法
第一种:配置环境变量
鼠标右击我的电脑,点击属性------点击右侧的高级系统设置-----点击系统属性弹出框下面的环境变量----找到Path,用户变量和系统变量的Path都可以,把自己下好的驱动添加进去就行了。这样以后在python里用selenium就不用添加驱动了,既然配置了环境变量了,他就会帮我们在电脑里寻找驱动。
我用的是win10
第二种:觉得配置环境变量麻烦的可以直接把下载好的驱动文件复制到自己的项目文件下,随时可以拿来用
四.正真的基础上场
selenium基础的使用方法我几乎都会讲到,如果有遗漏的话请在评论区告诉我,谢谢咯。
1.先要打开浏览器,打不开,我们后面也就做不了,万事开头先有前提
我的注释里有解释,后面的的解释也有一大部分在注释里,理解一下。
2.获取元素的方法
find_element_by_id() —— 根据id获取元素,常用
find_element_by_xpath() ——根据xpath获取元素,常用。如果不知道xpath的值怎么写,找到元素右键,copy里就能复制xpath,太方便了
find_element_by_class_name() ——根据类名获取元素,常用
find_element_by_css_selector() ——根据选择器获取元素,class的前面要加.(英文的点),id的前面要加#(应该叫它井号吧)
find_element_by_name() ——根据那么获取元素
find_element_by_tag_name()——根据标签名获取,一般不用,一个网页中大部分标签都有重复的
find_element_by_link_text()——根据a标签的文本获取元素,文本必须一字不差
find_element_by_partial_link_text()——根据a标签的文本获取元素,文本可以模糊查询,例如:www.baidu.com的文本为百度,查询时写个百就可以了,会根据写的百自动查找
下面演示一遍怎么获取的,不常用的我就不演示了,学习吗,也不一定全学,要取之精华,去其糟怕。也不是糟粕,就是不常用而已。
上面我写的方法的写法已经被弃用了,我将用新的写法演示,为什么我用上面写的旧的写法呢,新的写法我觉得跟不上旧的写法直观,写博客吗,一定要先考虑小伙伴们看不看得懂,看不看的舒服为首要。虽然弃用了但是还可以用,只是运行时有警告而已,我是从开发转测试的,做开发时就容不得半点红色的东西,会开发的懂得都懂,就不多说了。
这里要讲一下,不经意出错的小地方。
第一个:百度一下按钮的类名其实是bg s_btn,bg后面是空格不是.(英文点),但是你要写到selenium中你就得去点空格换成.(英文点),这就是规矩。
第二个:复制qq空间链接xpath,粘贴的时候要放到双引号里面,xpath路径里所有的双引号都要换成单引号,这样才可以。
求生欲:这里我就写了三种方法,只是我自己比较常用的,是我自己!!!并不是大众承认的,我求生欲还是比较高的。
3.操作元素
这个时候你脑子应该马上闪一下,很快就想到,不就是点击、输入等等这些操作。不错,这脑子没白闪一下,想对了。
操作的关键词:
click:点击
send_keys:输入
clear():清除全部
size:获取元素的大小
text:获取元素的文本内容
get_attribute():获取元素的属性值
is_displayed():判断元素是否可见
is_enabled():判断元素是否可用
常用的大家也都知道,浏览器吗无非就是点一点,输一输。
上实例:
大家觉着这样对吗,确实是点击了,是输入了,但总缺点东西啊。给你们30秒中想一想。很快吭,时间飞速流逝。
当然是缺元素了,大部分网页的输入框、按钮、链接,不只一个吧,你写成这样他怎么知道你要点哪个、输哪个,再说这代码本就是错的,sorry啊有点尴尬。
上正确实例:
也就是获取元素代码.后面的,一举两得
4.浏览器操作
浏览器咋操作呢,浏览器顾名思义你得浏览,如果浏览器太小看不见,你得巨大化吧;浏览器卡了你得刷新吧;如果你女朋友查看你浏览器,你得马上关闭浏览器吧,要是我呢我直接删历史,但我怕我忘了我也不舍得删啊。
maximize_window:浏览器巨大化
set_window_size:设置浏览器页面的分辨率
set_window_position:设置浏览器的位置
back():后退
forward():前进
refresh():刷新
close():关闭当前页面
quite():关闭浏览器
title():获取当前页面的title
current_url():获取当前页面的url
还是一样拿出几个来举个栗子:
5.鼠标操作
没鼠标没灵魂。
要想用鼠标操作先要实例化对象,运用ActionChains,导包
实例化对象
操作:
context_click:鼠标右击
double_click:双击
drag_and_drop:拖动
move_to_element():悬停
上实例操作:
最后一定要加上perform,不加的话不会执行。
因为点击的很快,显示的不明显,但看到新闻的条数到了从1-5变到了12-17,太快了,大家理解一下
6.键盘操作
没有一个好的键盘,游戏怎么能打出高超的技术呢
先导包
操作:
必须有:send_keys()
括号里:Keys.键盘按键
这里就写了俩常用的代表
(Keys.CONTROL,"引号里面就写英文字母了"):例如:复制(Keys.CONTROL,"c")
(Keys.BACKSPACE):删除,还有一个BACK_SPACE这俩一样
上实例:
7.下拉框操作
下拉框,选择不止在表面
下拉框和下面警告框处理的网页是b站一个博主学习资料的网页
先导包
操作:
select_by_index:通过select标签下的option标签的索引定位,一般索引都从0开始
select_by_value:通过option的属性value来定位
select_by_visible_text:通过option的文本定位
上实例:
这种有下拉框的页面不大好找,但是要是想找的的话也不难,一些管理系统里就有很多。但这个我觉得不常用,所以了解一下就好了。
8.页面滚动
页面滚动,下面的内容可能更精彩
8-1.设置滚动的起始位置和滚动到的最终位置
winddow.scrollTo(起始位置,最终位置)
8-2.driver驱动通过execute_script下达指令
9.警告框处理
都警告你了,你就不要再看了,懂得都懂。
9-1.想要处理警告框,先要选择它
alert=driver.switch_to.alert
9-2.利用创建的对象alert进行操作
send_keys:在警告框中写字
dismiss:取消警告框
accept:确定警告框
text:获取警告框的文本
上实例:
10.切换frame
我最喜欢的一个操作,没学到这个的时候,登录输入框按和按钮就是获取不到,巨烦,一度让我认为它真是个小可爱。
有可能有些小伙伴找不到在浏览器控制台找不到frame标签。先选择输入框,输入框的元素代码出来了往上找找,有个iframe标签就是了。
切换frame:
driver.switch_to.frame(frame元素)
上实例,拿网易邮箱做例子。:
为了更直观的理解,先运行个没选择frame失败和选择frame的做对比。
很明显没有获取到,输入框name的属性
切换到frame:
我们的异常捕获还在,如果获取不到,肯定输出 "那应该是没选择frame了",显然没输出,那就获取到了,小伙伴们如果还不确定,下面的视频,用户名输入框里已自动填入****************
11.切换窗口
来回切换窗口,在摸鱼的边缘反复横跳。
11-1.我要是没说错的话,大部分或是所有页面应该都有一个a标签,a标签里都有一个target属性
它的值有四种:
我自己的理解:
_self:在当前窗口打开一个新的窗口,替代了前一个窗口
_blank:新建了一个窗口,前一个窗口还存在
下面两种我没打见过,上面俩种我比较常见,所以不大理解下俩种
W3C上的解释:
_top:在父框架集中打开被链接文档。
_parent:在整个窗口中打开被链接文档。
11-2.这次的窗口切换就是关于值为_blank的,在操作新窗口的时候必须先选择这个窗口,才能进行操作
获取窗口:
window_handle:获取所有的窗口名称
current_window_handle:获取单个窗口名称
选择窗口:
switch_to.window(窗口)
上实例:
还是网易邮箱为例,但是这次要从别的页面打开网易邮箱,使浏览器打开一个新的窗口
第一次还是先写一个没切换窗口的,看看能否获取新窗口的元素,好对比。
很明显控制台输出了"窗口没切换",看来没获取到
这次上切换窗口的实例:
控制台只输出了窗口名称,没有输出“窗口没切换”,证明获取到了。小伙伴不确定的话,下面视频到最后用户名输入框也输入了**********,证明确实新窗口的元素被获取到了。
12.截图
这个相当简单,初入职场,截图快捷键还不知道是啥,你老板让你截图,你都不知道咋弄还得去开始程序里找,当场社si。现在都微信:ALT+a,QQ:CTRL+ALT+a的时代了
直接上代码,效果不是强,不上视频了
就一行代码,上面是截图,下面代码
13.cookie
cookie,干开发的应该懂得很多
我自己的理解:简单的来说,你在浏览器留下的信息,被存储下来了。举个例子:百度登录,你在浏览器登录百度,下次你再打开浏览器的时候,不用登陆,就已经登上了,因为你的cookie一直没有删掉。
第一步:浏览器控制台,点network
第二步:刷新一遍浏览器,往上找应该是第一个
在Headers里找Request Headers请求头,里面就有cookie,不是Response Headers响应头
上代码
注意:你取的cookie一定要使登录后的cookie
14.最后一个等待,终于要结束了
不容易终于到最后一个了--等待--为啥最后一个讲等待呢,因为对于等待我也不是很了解
三种等待方法:
强制等待:time.sleep(秒数),初学阶段最喜欢用的等待方法,导个包加个几秒等待旧ok了,相当简单,但是这种方法不稳定,不能准确保证代码能正常执。例如:打开一个网页一秒就够了,你设3秒,这是浪费时间;打开一个网页需要3秒,你设了1秒等待,就获取不到浏览器的元素,就无法进行下面的操作。
显示等待:导包还要导俩,这就很麻烦。我一直没理解这种等待,还是等评论区的大神教我吧
隐式等待:implicitly_wait(秒数)。他就是循环。列如你设置了10秒,每半秒重新查找一次,如果10秒内查找成功,那就往下执行了,如果超过10秒还没查找到,那就报错了。
五.最终小结 最后有惊喜
如果大家这样看不舒服的话,我用xmind做了一个整理,就不用大家动手记笔记了。
百度云盘链接:
提取码:ljh6
希望大家能给我提意见,多评论多点赞!!!
更多推荐
Selenium基础用法
发布评论