爬虫神器Selenium全攻略(2w字,建议收藏)

大家好,欢迎来到 Crossin的编程教室 !
今天带大家一起学(复)习模拟浏览器运行的库,它是一个用于应用程序测试的工具。测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括(7, 8, 9, 10, 11),,,,和等。
这里我将以为例进行功能的演示~
目录:
0. 准备工作
0.1. 安装selenium库
0.2. 安装浏览器驱动
1. 基本用法
1.1. 初始化浏览器对象
1.2. 访问页面
1.3. 设置浏览器大小
1.4. 刷新页面
1.5. 前进后退
2. 获取页面基础属性
3. 定位页面元素
4. 获取页面元素属性
4.1. get_attribute获取属性
4.2. 获取文本
4.3. 获取其他属性
5. 页面交互操作
5.1. 输入文本
5.2. 点击
5.3. 清除文本
5.4. 回车确认
5.5. 单选
5.6. 多选
5.7. 下拉框
6. 多窗口切换
6.1. Frame切换
6.2. 选项卡切换
7. 模拟鼠标操作
7.1. 左键
7.2. 右键
7.3. 双击
7.4. 拖拽
7.5. 悬停
8. 模拟键盘操作
9. 延时等待
9.1. 强制等待
9.2. 隐式等待
9.3. 显式等待
10. 其他
10.1. 运行JavaScript
10.2. Cookie
0. 准备工作
在开始后续功能演示之前,我们需要先安装浏览器并配置好,当然也需要安装库!
0.1. 安装selenium库
0.2. 安装浏览器驱动
其实,有两种方式安装浏览器驱动:一种是常见的手动安装,另一种则是利用第三方库自动安装。
以下前提:大家都已经安装好了浏览器哈
手动安装
先查看本地浏览器版本:(两种方式均可)
在浏览器的地址栏键入,即可查看浏览器版本号
图片
或者点击菜单帮助关于Google Chrome,查看浏览器版本号
图片
再选择对应版本号的驱动版本
下载地址:https://chromedriver.storage.googleapis.com/index.html
最后进行环境变量配置,也就是将对应的的可执行文件文件拖到的目录下。
注:当然也可以不这样做,但是在调用的时候指定绝对路径亦可。
自动安装
自动安装需要用到第三方库,先安装这个库,然后调用对应的方法即可。
在上述代码中,方法就是自动安装驱动的操作,它会自动获取当前浏览器的版本并去下载对应的驱动到本地。
如果本地已经有该浏览器渠道,则会提示其已存在。
搞定以上准备工作,我们就可以开始本文正式内容的学习啦~
1. 基本用法
这节我们就从初始化浏览器对象、访问页面、设置浏览器大小、刷新页面和前进后退等基础操作。
1.1. 初始化浏览器对象
在准备工作部分我们提到需要将浏览器渠道添加到环境变量或者指定绝对路径,前者可以直接初始化后者则需要进行指定。
图片
初始化浏览器对象
可以看到以上是有界面的浏览器,我们还可以初始化浏览器为无界面的浏览器
图片
截图
完成浏览器对象的初始化后并将其赋值给了对象,接下来我们就可以调用来执行各种方法模拟浏览器的操作了。
1.2. 访问页面
进行页面访问使用的是方法,传入参数为待访问页面的地址即可。
图片
1.3. 设置浏览器大小
方法可以用来设置浏览器大小(就是分辨率),而则是设置浏览器为全屏!
这里就不截图了,大家自行演示看效果哈~
1.4. 刷新页面
刷新页面是我们在浏览器操作时很常用的操作,这里方法可以用来进行浏览器页面刷新。
大家也是自行演示看效果哈,同快捷键。
1.5. 前进后退
前进后退也是我们在使用浏览器时非常常见的操作,这里方法可以用来实现前进,可以用来实现后退。
2. 获取页面基础属性
当我们用打开某个页面,有一些基础属性如网页标题、网址、浏览器名称、页面源码等信息。
输出如下:
需要注意的是,这里的页面源码我们就可以用、、以及等工具进行解析提取想要的信息了。
3. 定位页面元素
我们在实际使用浏览器的时候,很重要的操作有输入文本、点击确定等等。对此,提供了一系列的方法来方便我们实现以上操作。常说的定位页面元素的操作方式,我们一一演示一下!
我们以百度首页的搜索框节点为例,搜索python
图片
搜索框
搜索框的结构:
3.1. id定位
根据属性获取,这里属性是
图片
3.2. name定位
根据属性获取,这里属性是
3.3. class定位
根据属性获取,这里属性是
3.4. tag定位
我们知道是通过来定义功能的,比如是输入,是表格等等。每个元素其实就是一个,一个往往用来定义一类功能,我们查看百度首页的代码,可以看到有很多同类,所以其实很难通过去区分不同的元素。
由于存在多个,以上代码会报错。
3.5. link定位
这种方法顾名思义就是用来定位文本链接的,比如百度首页上方的分类模块链接。
图片
以新闻为例
3.6. partial定位
有时候一个超链接的文本很长,我们如果全部输入,既麻烦,又显得代码很不美观,这时候我们就可以只截取一部分字符串,用这种方法模糊匹配了。
3.7. xpath定位
前面介绍的几种定位方法都是在理想状态下,有一定使用范围的,那就是:在当前页面中,每个元素都有一个唯一的或或或的属性,那么我们就可以通过这个唯一的属性值来定位他们。
但是在实际工作中并非有这么美好,那么这个时候我们就只能通过或者来定位了。
3.8. css定位
这种方法相对要简洁些,定位速度也要快些。
3.9. find_element的By定位
除了上述的种定位方法,还提供了一个通用的方法,这个方法有两个参数:定位方式和定位值。
以上的操作可以等同于以下:
3.10. 多个元素
如果定位的目标元素在网页中不止一个,那么则需要用到,得到的结果会是列表形式。简单来说,就是后面多了复数标识,其他操作一致。
4. 获取页面元素属性
既然我们有很多方式来定位页面的元素,那么接下来就可以考虑获取以下元素的属性了,尤其是用进行网络爬虫的时候。
4.1. get_attribute获取属性
以百度首页的logo为例,获取logo相关属性
图片
获取logo的图片地址
输出:
4.2. 获取文本
以热榜为例,获取热榜文本和链接
图片
获取热榜的文本,用的是属性,直接调用即可
输出:
4.3. 获取其他属性
除了属性和文本值外,还有id、位置、标签名和大小等属性。
输出:
5. 页面交互操作
5.1. 输入文本
其实,在之前的小节中我们有用过此操作。
5.2. 点击
同样,我们也用过这个点击操作。
5.3. 清除文本
既然有输入,这里也就有清除文本啦。
5.4. 回车确认
比如,在搜索框输入文本,然后回车就出查询操作结果的情况。
5.5. 单选
单选比较好操作,先定位需要单选的某个元素,然后点击一下即可。
5.6. 多选
多选好像也比较容易,依次定位需要选择的元素,点击即可。
5.7. 下拉框
下拉框的操作相对复杂一些,需要用到模块。
先导入该类
在模块中有以下定位方法
我们来进行演示一波,由于暂时没找到合适的网页,我这边写了一个简单的网页本地测试(文件存为 帅哥.html)
然后,再演示下拉框的不同选择的方式
图片
下拉框
6. 多窗口切换
比如同一个页面的不同子页面的节点元素获取操作,不同选项卡之间的切换以及不同浏览器窗口之间的切换操作等等。
6.1. Frame切换
打开一个页面之后,默认是在父页面进行操作,此时如果这个页面还有子页面,想要获取子页面的节点元素信息则需要切换到子页面进行擦走,这时候就来了。如果想回到父页面,用即可。
6.2. 选项卡切换
我们在访问网页的时候会打开很多个页面,在中提供了一些方法方便我们对这些页面进行操作。
:获取当前窗口的句柄。
:返回当前浏览器的所有窗口的句柄。
:用于切换到对应的窗口。
7. 模拟鼠标操作
既然是模拟浏览器操作,自然也就需要能模拟鼠标的一些操作了,这里需要导入 类。
7.1. 左键
这个其实就是页面交互操作中的点击操作。
7.2. 右键
在上述操作中
:调用类,并将浏览器驱动作为参数传入
:模拟鼠标双击,需要传入指定元素定位作为参数
:执行中储存的所有操作,可以看做是执行之前一系列的操作
7.3. 双击
图片
7.4. 拖拽
拖拽操作嘛,开始位置和结束位置需要被指定,这个常用于滑块类验证码的操作之类。
我们以菜鸟教程的一个案例来进行演示
https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable
图片
拖拽
7.5. 悬停
图片
悬停效果
8. 模拟键盘操作
中的类提供了大部分的键盘操作方法,通过方法来模拟键盘上的按键。
引入类
常见的键盘操作
:删除键(BackSpace)
:空格键(Space)
:制表键(TAB)
:回退键(ESCAPE)
:回车键(ENTER)
:全选(Ctrl+A)
:复制(Ctrl+C)
:剪切(Ctrl+X)
:粘贴(Ctrl+V)
:键盘F1
.....
:键盘F12
实例操作演示:
定位需要操作的元素,然后操作即可!
9. 延时等待
如果遇到使用加载的网页,页面元素可能不是同时加载出来的,这个时候尝试在方法执行完成时获取网页源代码可能并非浏览器完全加载完成的页面。所以,这种情况下需要设置延时等待一定时间,确保全部节点都加载出来。
三种方式可以来玩玩:强制等待、隐式等待和显式等待
9.1. 强制等待
就很简单了,直接强制等待n秒,在执行方法之后执行。
9.2. 隐式等待
设置等待时间,如果到时间有元素节点没有加载出来,就会抛出异常。
9.3. 显式等待
设置一个等待时间和一个条件,在规定时间内,每隔一段时间查看下条件是否成立,如果成立那么程序就继续执行,否则就抛出一个超时异常。
WebDriverWait的参数说明
: 浏览器驱动
: 超时时间,等待的最长时间(同时要考虑隐性等待时间)
: 每次检测的间隔时间,默认是0.5秒
:超时后的异常信息,默认情况下抛出异常
until(method,message='')
: 在等待期间,每隔一段时间调用这个传入的方法,直到返回值不是False
: 如果超时,抛出,将传入异常
until_not(method,message='')
与相反,是当某元素出现或什么条件成立则继续执行,是当某元素消失或什么条件不成立则继续执行,参数也相同。
其他等待条件
10. 其他
补充一些
10.1. 运行JavaScript
还有一些操作,比如下拉进度条,模拟,使用方法来实现。
图片
10.2. Cookie
在使用过程中,还可以很方便对进行获取、添加与删除等操作。
输出:
以上就是本次有关的全部内容,后续我们将演示在爬虫以及web自动化方面的一些实战案例,敬请期待!

两个鬼故事甘姓起名字女孩名字好听原味主张subverse大清之祸害财富公司起名字女孩起名字大全免费纪委书记述职报告白羊座的性格南阳张十八起名靠谱吗光之子攻略产品产品起名vb6.0精简版美国起重机排名国家疾控中心是什么级别医疗器材有限公司公司起名起名字寓意好一些的成语液体灌装机fsyanyi都市异能免费自助起名改起名网站三国战神小说李字起名善良的小峓子在线观看中文翻译齐起名女孩太极鱼起名网测名打分名典起名网免费测量樱花动漫官方官网用金木水火土起5个游戏名字藏文翻译器dnf复仇者名字少年生前被连续抽血16次?多部门介入两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”淀粉肠小王子日销售额涨超10倍高中生被打伤下体休学 邯郸通报单亲妈妈陷入热恋 14岁儿子报警何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言张家界的山上“长”满了韩国人?男孩8年未见母亲被告知被遗忘中国拥有亿元资产的家庭达13.3万户19岁小伙救下5人后溺亡 多方发声315晚会后胖东来又人满为患了张立群任西安交通大学校长“重生之我在北大当嫡校长”男子被猫抓伤后确诊“猫抓病”测试车高速逃费 小米:已补缴周杰伦一审败诉网易网友洛杉矶偶遇贾玲今日春分倪萍分享减重40斤方法七年后宇文玥被薅头发捞上岸许家印被限制高消费萧美琴窜访捷克 外交部回应联合利华开始重组专访95后高颜值猪保姆胖东来员工每周单休无小长假男子被流浪猫绊倒 投喂者赔24万小米汽车超级工厂正式揭幕黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发当地回应沈阳致3死车祸车主疑毒驾恒大被罚41.75亿到底怎么缴妈妈回应孩子在校撞护栏坠楼外国人感慨凌晨的中国很安全杨倩无缘巴黎奥运校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变王树国卸任西安交大校长 师生送别手机成瘾是影响睡眠质量重要因素国产伟哥去年销售近13亿阿根廷将发行1万与2万面值的纸币兔狲“狲大娘”因病死亡遭遇山火的松茸之乡“开封王婆”爆火:促成四五十对奥巴马现身唐宁街 黑色着装引猜测考生莫言也上北大硕士复试名单了德国打算提及普京时仅用姓名天水麻辣烫把捣辣椒大爷累坏了

两个鬼故事 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化