【爬虫开发】爬虫开发从0到1全知识教程第4篇:Selenium概要【附代码文档】
教程总体简介:爬虫基础、Mongodb数据库、scrapy爬虫框架、利用appium抓取app中的信息、requests模块、数据提取概述、数据提取-jsonpath模块、数据提取概要、数据提取-lxml模块、获取当前标签页的全部cookie信息、把cookie转化为字典、删除所有的cookie、显式等待、参数20表示最长等待20秒、参数0.5表示0.5秒检查一次规定的标签是否存在、EC.presence_of_element_located((By.LINK_TEXT, '好123')) 表示通过链接文本内容定位标签、每0.5秒一次检查、通过链接文本内容定位标签是否存在、如果存在就向下继续执行、如果不存在、直到20秒上限就抛出异常、i = 0、while True:、options.set_headles() # 无界面模式的另外一种开启方式、反爬与反反爬
https://gitee.com/yinuo112/Backend/blob/master/爬虫/爬虫开发从0到1全知识教程/note.md
全套教程部分目录:
Selenium概要
本阶段主要学习selenium自动化测试框架在爬虫中的应用,selenium能够大幅降低爬虫的编写难度,但是也同样会大幅降低爬虫的爬取速度。在逼不得已的情况下我们可以使用selenium进行爬虫的编写。
selenium的介绍
知识点:
- 了解 selenium的工作原理
- 了解 selenium以及chromedriver的安装
- 掌握 标签对象click点击以及send_keys输入
1. selenium运行效果展示
Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,Selenium 可以直接调用浏览器,它支持所有主流的浏览器(包括PhantomJS这些无界面的浏览器),可以接收指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏等。我们可以使用selenium很容易完成之前编写的爬虫,接下来我们就来看一下selenium的运行效果
1.1 chrome浏览器的运行效果
在下载好chromedriver以及安装好selenium模块后,执行下列代码并观察运行的过程
|
|
1.2 phantomjs无界面浏览器的运行效果
PhantomJS 是一个基于Webkit的“无界面”(headless)浏览器,它会把网站加载到内存并执行页面上的 JavaScript。下载地址:[
|
|
1.3 观察运行效果
- python代码能够自动的调用谷歌浏览或phantomjs无界面浏览器,控制其自动访问网站
1.4 无头浏览器与有头浏览器的使用场景
- 通常在开发过程中我们需要查看运行过程中的各种情况所以通常使用有头浏览器
- 在项目完成进行部署的时候,通常平台采用的系统都是服务器版的操作系统,服务器版的操作系统必须使用无头浏览器才能正常运行
2. selenium的作用和工作原理
利用浏览器原生的API,封装成一套更加面向对象的Selenium WebDriver API,直接操作浏览器页面里的元素,甚至操作浏览器本身(截屏,窗口大小,启动,关闭,安装插件,配置证书之类的)
- webdriver本质是一个web-server,对外提供webapi,其中封装了浏览器的各种功能
- 不同的浏览器使用各自不同的webdriver
知识点:了解 selenium的工作原理
3. selenium的安装以及简单使用
我们以谷歌浏览器的chromedriver为例
3.1 在python虚拟环境中安装selenium模块
pip/pip3 install selenium
3.2 下载版本符合的webdriver
以chrome谷歌浏览器为例
- 查看谷歌浏览器的版本
- 访问[
- 点击notes.txt进入版本说明页面
- 查看chrome和chromedriver匹配的版本
- 根据操作系统下载正确版本的chromedriver
-
解压压缩包后获取python代码可以调用的谷歌浏览器的webdriver可执行文件
-
windows为
chromedriver.exe
-
linux和macos为
chromedriver
-
chromedriver环境的配置
-
windows环境下需要将 chromedriver.exe 所在的目录设置为path环境变量中的路径
- linux/mac环境下,将 chromedriver 所在的目录设置到系统的PATH环境值中
知识点:了解 selenium以及chromedriver的安装
4. selenium的简单使用
接下来我们就通过代码来模拟百度搜索
|
|
webdriver.Chrome(executable_path='./chromedriver')
中executable参数指定的是下载好的chromedriver文件的路径driver.find_element_by_id('kw').send_keys('python')
定位id属性值是'kw'的标签,并向其中输入字符串'python'-
driver.find_element_by_id('su').click()
定位id属性值是su的标签,并点击 -
click函数作用是:触发标签的js的click事件
知识点:掌握 标签对象click点击以及send_keys输入
selenium提取数据
知识点:
- 了解 driver对象的常用属性和方法
- 掌握 driver对象定位标签元素获取标签对象的方法
- 掌握 标签对象提取文本和属性值的方法
1. driver对象的常用属性和方法
在使用selenium过程中,实例化driver对象后,driver对象有一些常用的属性和方法
driver.page_source
当前标签页浏览器渲染之后的网页源代码driver.current_url
当前标签页的urldriver.close()
关闭当前标签页,如果只有一个标签页则关闭整个浏览器driver.quit()
关闭浏览器driver.forward()
页面前进driver.back()
页面后退driver.screen_shot(img_name)
页面截图
知识点:了解 driver对象的常用属性和方法
2. driver对象定位标签元素获取标签对象的方法
在selenium中可以通过多种方式来定位标签,返回标签元素对象
|
|
-
注意:
-
find_element和find_elements的区别:
- 多了个s就返回列表,没有s就返回匹配到的第一个标签对象
- find_element匹配不到就抛出异常,find_elements匹配不到就返回空列表
-
by_link_text和by_partial_link_tex的区别:全部文本和包含某个文本
-
以上函数的使用方法
driver.find_element_by_id('id_str')
知识点:掌握 driver对象定位标签元素获取标签对象的方法
3. 标签对象提取文本内容和属性值
find_element仅仅能够获取元素,不能够直接获取其中的数据,如果需要获取数据需要使用以下方法
-
对元素执行点击操作
element.click()
-
对定位到的标签对象进行点击操作
-
向输入框输入数据
element.send_keys(data)
-
对定位到的标签对象输入数据
-
获取文本
element.text
-
通过定位获取的标签对象的
text
属性,获取文本内容 -
获取属性值
element.get_attribute("属性名")
-
通过定位获取的标签对象的
get_attribute
函数,传入属性名,来获取属性的值
- 代码实现,如下:
|
|
知识点:掌握 元素对象的操作方法
- 点赞
- 收藏
- 关注作者
评论(0)