在Python爬虫中将PhantomJS伪装成Chrome浏览器

前言

在写爬虫的过程中,出于系统环境或是效率的问题,我们经常使用PhantomJS作为Selenium操纵的浏览器webdriver,而不是直接使用Chrome或FireFox的webdriver,尽管后者更加直观。

PhantomJS的优点虽然很多,但是缺点却也不少,有一个不能称之为缺点的缺点就是,PhantomJS的浏览器标识是“PhantomJS”(勇敢的做自己竟然有错……:))

PhantomJS的标识本没有什么问题,但是在现在越来越多的网站不断升级自己的反爬虫技术的情况下,PhantomJS显然成为了一个和“requests”一样的靶子。

只要服务器后台识别到访问者的User-Agent为PhantomJS,就有可能被服务器判定为爬虫行为,而导致爬虫失效。

如同在requests中修改header头域以伪装成浏览器一样,我们可以在Selenium中将PhantomJS的浏览器标识修改为任意浏览器的标识。下面介绍一下:

PhantomJS的浏览器标识

首先来看看PhantomJS的浏览器标识是怎样的。

http://service.spiritsoft.cn/ua.html是一个获取浏览器标识User-Agent的网站,访问它就会显示当前使用的浏览器的标识:

我们使用Selunium操纵PhantomJS访问http://service.spiritsoft.cn/ua.html,看看返回的结果:

很明显的有PhantomJS的痕迹。接下来,我们对PhantomJS的浏览器标识进行修改。

伪装成Chrome

引入一个关键的模块——DesiredCapabilities:

这个模块是干什么用的呢?我们看看源码的解释:

描述了一系列封装的浏览器属性的键值对,大致就是用来设置webdriverde的属性。我们使用它来设置PhantomJS的User-Agent。

首先将DesiredCapabilities转换为一个字典,方便添加键值对:

然后添加一个浏览器标识的键值对:

最后,在实例化PhantomJS中设为参数:

完整的代码如下:

我们运行一下代码:

成功地将PhantomJS标识为了Chrome浏览器。

是不是很简单?

PS:公众号上显示代码着实是痛苦,设成代码块一保存,样式就丢了,设成图片,一些长的代码又看不清。如果代码看不清的,可以点击原文,在博客上阅读。

原文发布于微信公众号 - 州的先生(zmister2016)

原文发表时间:2017-11-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

3 条评论
登录 后参与评论

相关文章

来自专栏林冠宏的技术文章

android studio 使用 jni 编译 opencv 完整实例 之 图像边缘检测!从此在andrid中自由使用 图像匹配、识别、检测

目录:   1,过程感慨;   2,运行环境;   3,准备工作;   4,编译 .so   5,遇到的关键问题及其解决方法   6,实现效果截图。 (原创:转...

7905
来自专栏星流全栈

Meteor1.3七日谈 — Mantra核心简介

1073
来自专栏后台全栈之路

U-Boot 中添加自定义网络通信的方法

U-boot 没有 TCP 协议栈,不支持 TCP(提出要在 U-boot 里面支持 TCP 的协议的 PM 你给我出去)。但是UDP 还是有的。使用 U-bo...

1228
来自专栏小白安全

绕过软WAF攻略

现在软waf较为多,就在今年夏天苦逼挖洞的日子里经常遇到360主机卫士,安全狗,云锁之类的软waf进行拦截,经常碰到如下拦截提示: ? ? ? 看到以上...

3915
来自专栏小文博客

为你的站点加上“懒加载”——提高用户体验&节省流量

1193
来自专栏前端之路

VSCode安装与配置

1224
来自专栏格子的个人博客

Jmeter系列二:CSV参数化、BeanShell、服务器监控等进阶使用

关于Jmeter,关于压力/性能测试,本不是我的专业范畴,但是由于前线需要,所以我就上阵了,粗浅涉猎并没有精通,所以哪里有写的不好的,请果断指出,反正我是不会改...

862
来自专栏大魏分享(微信公众号:david-share)

Openshift-F5集成(南北流量走F5)

942
来自专栏惨绿少年

企业防火墙之iptables

1.1 企业中安全优化配置原则 尽可能不给服务器配置外网ip ,可以通过代理转发或者通过防火墙映射.并发不是特别大情况有外网ip,可以开启防火墙服务. 大并发的...

5446
来自专栏王磊的博客

Node出错导致运行崩溃的解决方案

许多人都有这样一种映像,NodeJS比较快; 但是因为其是单线程,所以它不稳定,有点不安全,不适合处理复杂业务; 它比较适合对并发要求比较高,而且简单的业务场景...

46914

扫码关注云+社区