type
status
date
slug
summary
tags
category
icon
password
 
😀
这里写文章的前言: 偶然接触到了爬虫,虽然觉得自己会很少用到这个技术,但还是写一写
 

📝 主旨内容

1 Selenium

1.1Selenium概述

Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,Selenium 可以直接运行在浏览器上,它支持所有主流的浏览器。
因为Selenium可以控制浏览器发送请求,并获取网页数据,因此可以应用于爬虫领域。
Selenium 可以根据我们的指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏,或者判断网站上某些动作是否发生。
Selenium 自己不带浏览器,不支持浏览器的功能,它需要与第三方浏览器结合在一起才能使用。

1.2 浏览器驱动

浏览器驱动用于使用selenium操控本地浏览器执行自动化操作。
驱动网站:https://npmmirror.com/
 
notion image
notion image
notion image

1.3 基本使用

安装库
notion image
或使用命令
控制浏览器自动网页
notion image
调用Chrome驱动,控制浏览器打开网页

控制页面元素

2 常用操作

2.1 基本使用

2.1.1. 元素定位

获取单个元素
如果找不到相应的元素会报错
获取多个元素
访问有道翻译网站,输入单词,并获取翻译后的内容

2.1.2 内容获取

2.1.3. 窗口操作

2.1.4. 元素等待

翻页获取每页元素

现在的网页越来越多采用了 Ajax 技术,这样程序便不能确定何时某个元素完全加载出来了。如果实际页面等待时间过长导致某个dom元素还没出来,但是你的代码直接使用了这个WebElement,那么就会抛出NullPointer的异常。
为了避免这种元素定位困难而且会提高产生 ElementNotVisibleException 的概率。所以 Selenium 提供了两种等待方式,一种是隐式等待,一种是显式等待。
隐式等待是等待特定的时间,显式等待是指定某一条件直到这个条件成立时继续执行。

显式等待

显式等待指定某个条件,然后设置最长等待时间。如果在这个时间还没有找到元素,那么便会抛出异常了。
显示等待使用WebDriverWait完成
  • driver 所创建的浏览器driver
  • timeout 最长时间长度(默认单位:秒)
  • poll_frequency 间隔检测时长(每)默认0.5秒
  • ignored_exceptions 方法调用中忽略的异常,默认只抛出:找不到元素的异常
基础格式(webDriverWait+until+(判断条件))
until
直到调用的方法返回值为True
method:expected_conditions库中定义的方法 message :自定义报错信息
判断条件

隐式等待

隐式等待比较简单,就是设置全局元素查找的超时时间
设置的时间单位为秒,例如implicitly_wait(30),意思是超过30秒没有定位到一个元素,程序就会报错抛出异常,期间会一直轮询查找定位元素。

3 页面操作(动作链)

3.1. 鼠标及键盘操作

鼠标操作

键盘操作

3.2. 滚动条

在HTML页面中,由于前端技术框架的原因,页面元素为动态显示,元素根据滚动条的下拉而被加载

3.3. 窗口截图

自动化脚本是由程序去执行的,因此有时候打印的错误信息并不是十分明确。如果在执行出错的时候对当前窗口截图保存,那么通过图片就可以非常直观地看到出错的原因。

4 存储数据

CSV:略
MYSQL:

📎 参考文章

 
💡
注意事项
因为爬虫技术涉及面广,且技术复杂,推荐直接在网络上寻找已有数据进行处理分析,因此爬虫阶段可以只做参考。
数据网站参考:
 
前后端分离项目部署教程对象比较方式