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的网站,访问它就会显示当前使用的浏览器的标识:

# 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浏览器。

是不是很简单?

本文出自 “州的先生” 博客,转载请与作者联系!

python伪装浏览器https_Selenium中通过修改User-Agent标识将PhantomJS伪装成Chrome浏览器...相关推荐

  1. python configure函数 循环_使用python统计git仓库中频繁修改的热点函数

    本篇博客以开源代码RT-Thread为例,描述了如何使用python扫描统计代码中频繁修改的函数,帮助我们发现系统中需求变化和BUG制造的重灾区. 需求背景 最近在学习设计模式时,印象深刻的一句话就是 ...

  2. 用python读取pg数据库中的blob类型图片数据,转换存成jpg格式存到本地文件夹

    先啰嗦一下,热热身 在工作中,我们常见到数据库中的数据类型主要为char,varchar,text等,但是有时我们也会用blob格式来存储语音文件或者图像文件,在网上找了很多,都没找到合适的办法,只好 ...

  3. 其他-google浏览器启动以后提示:您的个人资料来自新版google chrome 浏览器,因此无法使用

    启动google浏览器,每次都会弹出提示: 解决办法: win+R ,输入%USERPROFILE%\AppData\Local\Google\Chrome\User Data\Default 将该路 ...

  4. js中当等于最小值是让代码不执行_从浏览器多进程到JS单线程,JS运行机制最全面的一次梳理...

    前言 见解有限,如有描述不当之处,请帮忙及时指出,如有错误,会及时修正. ----------超长文+多图预警,需要花费不少时间.---------- 如果看完本文后,还对进程线程傻傻分不清,不清楚浏 ...

  5. python在手机使用webdriver.chromns_Selenium +Chrome浏览器如何模拟手机操作

    Selenium +Chrome浏览器如何模拟手机操作 进入手机模式 打开谷歌浏览器,按F12,进入开发者模式,点击Toggle device toolbar,进入手机模式 设置Chrome的手机模式 ...

  6. Python实现Chrome浏览器书签自动备份

    import os import json# 设置 Chrome 书签文件的路径 chrome_path = r"C:\MyChromeDevUserData\Default\Bookmar ...

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

    因为我的博客是根据我每个阶段自己做的事情而写的,所以前言可能有点跑题,但它更有利于让我回忆这个阶段自己的所作所为.这篇文章主要介绍Selenium爬虫获取当前窗口句柄.切换窗口句柄以及调用Chrome ...

  8. 修改Google Chrome浏览器背景颜色的方法

    Stylish是一个Firefox扩展,你可以利用它来定制目标网页或网站的css样式,甚至一些Firefox app的样式,让浏览效果更加舒适.而且在UserStyles网站上已经有不少现成的样式可供 ...

  9. java实现浏览器ui中的收藏夹_基于Selenium2+Java的UI自动化(2) - 启动浏览器

    一.准备工作 我们常用的浏览器主要有三个:chrome.Firefox.IE:其中chrome 和 IE 需要下载驱动程序,才能启动浏览器,注意驱动程序有32位和64位两种. 另外:如何查看本机的浏览 ...

最新文章

  1. Boosting和Bagging: 如何开发一个鲁棒的机器学习算法
  2. XenServer 6.5实战系列之四:XenServer 6.5 Installation
  3. 移动开发web第一天
  4. java 打印 模板_Java输入输出模板
  5. CCF201809-4 再卖菜
  6. 重新安装MySQL5.7.21教程_CentOS6.9安装mysql5.7.21教程
  7. linux软raid 系统坏了,LINUX下软RAID的制造及如何查看坏盘?
  8. [TCP/IP] TCP建立与终止
  9. 安卓游戏时禁止状态栏下拉,如何在Android中禁用通知栏下拉菜单?
  10. 情人节,请带走我给您的祝福
  11. BootStrap-datepicker日期插件
  12. 〖Python零基础入门篇④〗- Pycharm插件安装与常用的插件
  13. 如何导出计算机硬盘重数据,硬盘对拷教程,100%保存原硬盘数据
  14. Linux基本的常用命令
  15. CentOS 7 root 密码破解及 grub2 加密
  16. Python入门习题大全——人生的不同阶段
  17. signature=efdb5ad90eeeea3f87ec2e1a04449071,Zastosowanie komórek macierzystych w leczeniu cukrzycy
  18. 2019—猪年的愚人节
  19. 向量和矩阵的求导公式
  20. Java 百度地图入门 案例一

热门文章

  1. java序列化3-序列化设计防坑点
  2. 【C语言每日一练——第1练:字母大小写转换】
  3. resure挽救笔记本系统和一些相关的操作记录
  4. excel表格中单元格里面有个斜杠怎么写字?
  5. 超大玉螺旋丸 -A的个数 蓝桥杯练习题
  6. 读取股票数据存储到本地MySQL数据库(三)
  7. Spring事务管理中异常回滚知识点总结
  8. 使用电脑时经常遇到问题?来试试这四款小众的实用软件吧
  9. 帆软填报-根据角色/权限设置校验规则(含开关配置表校验)
  10. PCI GXL 关于JPS与作业