模拟浏览器操作——Selenium的使用

网页其实有很多复杂的操作,很多时候对于一些 JavaScript 动态渲染的页面来说,直接爬虫是不太方便的。

可能得用一下 python 的 Selenium 框架。

参考书籍:python3 网络爬虫实战

介绍

Selenium 是一个自动化测试工具,利用它我们可以驱动浏览器执行特定的动作,如点击,下拉等操作,同时还可以获取当前呈现的页面的网页源代码。

准备工作

浏览器配置好 ChromeDriver

下载好 http://npm.taobao.org/mirrors/chromedriver / 找与 chrome 浏览器版本相同。

将下载的 chromedriver.exe 放到 Google 浏览器的安装目录下。

配置环境变量

安装 python 的 Selenium 库

测试

如果出现空白页面代表成功了。

初次使用

我们来看一看 Selenium 有一些怎样的功能

看完上面的注释,我们来感受一下过程:运行代码后会自动弹出一个 chrome 浏览器,浏览器会跳转到百度页面,然后在搜索框搜索 python,然后跳转到页面,等待加载完成,控制台会输出 url、cookies 及源代码。

这全程都是程序自动运行的。

所以可以看出,这个 python 可以帮助我们自动执行各个动作,正好可以应对 JavaScript 的动态渲染操作。

过程分析

1. 声明浏览器对象

2. 访问页面

3. 查找节点

找节点基本方法(使用审查元素)

可以看出 id 为 q,name 也为 q 等等信息。

方法函数

根据 name 值获取:

根据 id 值获取:

根据 class 值获取:

根据标签获取:

还有根据 XPath、css 选择器等获取方式

输出为

都获取到了输入框。

如果我们使用了方法,只能获取到第一个节点,如果用方法,则结果是列表类型。

4. 节点交互

在获取到节点后,自然需要执行一些操作,也就是我们通过浏览器模拟执行一些工作。

输入文字用方法;

清空文字用方法;

点击按钮用方法;

非常简单!

想了解更多对节点的操作,可观看官方文档的节点交互介绍:

https://selenium-python.readthedocs.io/api.html

只需要简单的四步骤,就可以轻松让浏览器自动执行简单操作。

5. 动作链

但有时候如果是我们要执行的动作如果是没有特定的节点对象呢?如鼠标拖拽,键盘按键等,这时候我们得利用另外一种方式来进行,那就是动作链

我们用菜鸟教程的一个拖拽案例

http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable

看看它如何执行的。

由系统自动执行。

6. 执行 JavaScript

有时候如果没有 API 提供,如下拉进度条等,可以直接模拟运行 JavaScript,使用方法即可实现,代码如下:

懂 JavaScript 应该就知道是什么意思啦,通过传递 JavaScript 语句,给到 url 并实行。

在这里我们利用了 方法将进度条下拉到最底部,然后弹出 alert 提示框。

7. 获取节点信息

既然我们可以通过属性获取网页源代码,自然会有方法可以获取到更多详细的信息。

获取属性 `get_attribute()`

输出为

获取文本值

获取节点内的文本信息。相当于 的 get_text() 方法, 的 text() 方法。

我们通过打开 url 的页面,然后获取提问按钮的节点,再将其文本值打印出来。

获取其他的一些属性

节点 id:

节点在页面中的相对位置:

标签名称:

节点大小:

接上

输出为

8. 延时等待

一般打开一个网页都需要一定的时间,网页源代码也是分批呈现出来,如果直接打开 url 就直接获取网页源代码,就容易缺失内容。所以,我们需要一定的延时等待时间来保证完整性。

等待的方式分两种,一种是隐式等待,显式等待

隐式等待

如果使用隐式等待的话,如果 Selenium 没有在 Dom 中找到节点,将继续等待,超出设定时间后则抛出找不到节点的异常。

就是当查找节点而节点没有立即出现的时候,隐式等待将等待一段时间再查找 DOM。

用的是方法。

显式等待

隐式等待指示规定了一个固定时间,页面的加载时间受到网络条件影响。

所以可以用显式等待。

用对象,指定好最长等待时间,调用它的方法,传入要等待条件

我们这样做的效果是,在 10 秒内如果 ID 为 q 的节点加载完成,就返回该节点,如果超过 10 秒还没有加载出来,那就抛出异常。

等待条件可以用多种,有兴趣了解可参考官方文档:

9. 前进后退

可以用和方法。

当运行完这串代码后,自然就能感受到这个函数的作用了。

10.Cookies

Selenium 可方便对 Cookies 进行操作,例如获取,添加,删除 Cookies 等等。

通过,,方法。

11. 选项卡管理

可以通过传递 JavaScript 传递,打开一个新选项卡。

再通过,切换选项卡。

百度 -> 新选项卡 -> 切换到第二个新选项卡 -> 淘宝 -> 切换到第一个 -> 打开知乎

12. 异常处理

异常处理程序是十分重要的。

通过语句来捕获各种异常。

因此,有了 Selenium,处理 Javascript 不再是难事!

已经学习了一段时间python,对这语言有了基础的语言,接下来我应该要做更多的实战,让自己可以真正实践起来,我已经努力转战真正的实战项目做了!!

-not end-

python 学习笔记

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181028G1J2Z300?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券