Selenium中通过修改User-Agent标识将PhantomJS伪装成Chrome浏览器

文章首发个人博客:http://zmister.com/archives/179.html

Python爬虫、GUI开发、渗透测试、机器学习,尽在http://zmister.com/

在写爬虫的过程中,出于系统环境或是效率的问题,我们经常使用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,看看返回的结果:

# coding:utf-8

from selenium import webdriver
from bs4 import BeautifulSoup

def defaultPhantomJS():
    driver = webdriver.PhantomJS(executable_path=r"D:\phantomjs.exe")
    driver.get(‘http://service.spiritsoft.cn/ua.html‘)
    source = driver.page_source
    soup = BeautifulSoup(source,‘lxml‘)
    user_agent = soup.find_all(‘td‘,attrs={‘style‘:‘height:40px;text-align:center;font-size:16px;font-weight:bolder;color:red;‘})
    for u in user_agent:
        print(u.get_text().replace(‘\n‘,‘‘).replace(‘ ‘,‘‘))
    driver.close()

很明显的有PhantomJS的痕迹。

接下来,我们对PhantomJS的浏览器标识进行修改。

伪装成Chrome

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

from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

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

class DesiredCapabilities(object):
    """
    Set of default supported desired capabilities.

    Use this as a starting point for creating a desired capabilities object for
    requesting remote webdrivers for connecting to selenium server or selenium grid.

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

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

dcap = dict(DesiredCapabilities.PHANTOMJS)

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

dcap[‘phantomjs.page.settings.userAgent‘] = (‘Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36‘)

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

driver = webdriver.PhantomJS(executable_path=r"D:\phantomjs.exe",desired_capabilities=dcap,service_args=[‘--ignore-ssl-errors=true‘])

完整的代码如下:

# coding:utf-8

from selenium import webdriver
from bs4 import BeautifulSoup
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

def editUserAgent():
    dcap = dict(DesiredCapabilities.PHANTOMJS)
    dcap[‘phantomjs.page.settings.userAgent‘] = (‘Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36‘)
    driver = webdriver.PhantomJS(executable_path=r"D:\phantomjs.exe",desired_capabilities=dcap,service_args=[‘--ignore-ssl-errors=true‘])
    driver.get(‘http://service.spiritsoft.cn/ua.html‘)
    source = driver.page_source
    soup = BeautifulSoup(source, ‘lxml‘)
    user_agent = soup.find_all(‘td‘, attrs={
        ‘style‘: ‘height:40px;text-align:center;font-size:16px;font-weight:bolder;color:red;‘})
    for u in user_agent:
        print(u.get_text().replace(‘\n‘, ‘‘).replace(‘ ‘, ‘‘))
    driver.close()

if __name__ == ‘__main__‘:
    editUserAgent()

我们运行一下代码:

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

是不是很简单?

时间: 2024-08-03 13:02:14

Selenium中通过修改User-Agent标识将PhantomJS伪装成Chrome浏览器的相关文章

火狐浏览器修改useragent伪装成微信浏览器

1.在浏览器地址栏输入“about:config” 2.新建字符串“general.useragent.override” 3.输入伪装的UserAgent值 iPhone版本 Mozilla/5.0 (iPhone; CPU iPhone OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Mobile/9B176 MicroMessenger/4.3.2 安卓版 Mozilla/5.0 (Linux; U; Android

修改Chrome设置伪装成手机M站

更改PC端Chrome浏览器的属性值,将PC端Chrome浏览器设定为手机端尺寸的浏览器. #!usr/bin/env python #-*- coding:utf-8 -*- #修改Chrome设置伪装成手机M站 from selenium import webdriver import unittest,time class TestDemo(unittest.TestCase): def test_ipadChrome(self): options = webdriver.ChromeOp

[python爬虫] Selenium切换窗口句柄及调用Chrome浏览器

因为我的博客是根据我每个阶段自己做的事情而写的,所以前言可能有点跑题,但它更有利于让我回忆这个阶段自己的所作所为.这篇文章主要介绍Selenium爬虫获取当前窗口句柄.切换窗口句柄以及调用Chrome浏览器几个知识点,其中获取当前句柄的方法是非常重要的一个知识点,只有真正遇到的时候才能体会到它的强大.        最近课程比较多,写博客的内容也比较杂,包括网站搭建.HTML设计.计算机图形学.Python数据挖掘.Flash动画等.同时,这周也有老师让我帮忙写几个爬虫,自己进一步理解了爬虫的好

Chrome浏览器修改user-agent,伪装其他浏览器,附带微信、支付宝user-agent

1,windows上F12,Mac上Alt+Command+I打开浏览器调试工具. 2,右下角的点点开,选择More tools,展开之后选择Network conditions. 3,下方会打开一个tab.里面是关于浏览器网络的一些设置.是否支持cache,选择什么类型的网络,user-agent等. 4,修改user-agent,可以伪装成其他浏览器. 5,如微信,支付宝的user-agent 微信:Mozilla/5.0 (Linux; U; Android 4.1.2; zh-cn; G

使用sql语句创建修改SQL Server标识列(即自动增长列)

一.标识列的定义以及特点SQL Server中的标识列又称标识符列,习惯上又叫自增列.该种列具有以下三种特点:1.列的数据类型为不带小数的数值类型2.在进行插入(Insert)操作时,该列的值是由系统按一定规律生成,不允许空值3.列值不重复,具有标识表中每一行的作用,每个表只能有一个标识列.由于以上特点,使得标识列在数据库的设计中得到广泛的使用.二.标识列的组成创建一个标识列,通常要指定三个内容:1.类型(type)在SQL Server 2000中,标识列类型必须是数值类型,如下:decima

Confluence 6 修改默认空间标识图片

空间标识图片在边栏上的站点目录(Sites Directory)中作为图标进行显示.默认的空间标识图片将会应用到所有的空间中,如果你没有自定义的空间标识被定义的话,请查看 Configure the Sidebar 页面中的内容. 你需要 Confluence 的管理员权限才能进行修改默认空间标识图片. 希望修改默认的空间标识图片: 进入  > 基本配置(General Configuration) > 默认空间标识图片(Default Space Logo.) 选择 Logo:ON  选择

Confluence 6 修改站点的标识图片

你可以通过修改标识图片(Logos)来修改你 Confluence 站点的外观和感觉. 你可以修改: 站点标识图片(site logo) 为所有空间修改默认空间标识图片(default space logo) 个人空间的标识图片(space logo)  空间标识图片(Space logo):显示在边栏和主面板上的图标. 站点标识图片(Site logo):这个图标在系统中总是可见的,可以通过单击这个图标来进入主面板(或者站点主页). 站点的标识图片在页面的顶部可以通过 Confluence 看

selenium中元素操作之上传操作(六)

上传操作分为两种情况: 1.input标签上传 如果是input可以直接输入路径的,那么直接调用send_keys输入路径,和前边的元素操作类似,在这里不再过多的赘述. 2.非input标签上传 非input标签上传的,则需要借助第三方的工具: 这里我们用python中的第三方库pywin32库,识别对话框句柄,进而进行上传操作 首先安装第三方库:pip install pywin32 借助winspy来辅助定位,winspy下载地址:https://sourceforge.net/projec

解决Ext4.2.3中propertyGrid修改后点击排序报错

Ext4.2.3中PropertyGrid修改后点击排序报错,具体错误信息如下: 一开始还怀疑是自己哪里配置错了,各种尝试结果还是一样.查遍百度和谷歌,无果,只有一篇帖子说是4.2.4修正了.还是自己动手吧,自己动手丰衣足食. 点开报错地方(如下图所示),原来是me.field.column没有定义. 然后继续找,找啊找啊找到Ext.grid.property.Grid的getCellEditor方法.此方法有参数column,可在方法体内,column就没有被用到过,于是就感觉问题出在这里.