本专栏主要分享Python爬虫工程师在技术进阶过程中必须掌握的各种反反爬技能。期待和Python爬虫爱好者共同探讨。

前言:

网页的js加密是爬虫过程中经常会遇到的反爬措施,导致在开发爬虫脚本时,无法正确构造请求头、表单等信息。

通过本案例,希望带给你破解js加密的常规流程和解密思路。

注意:

或许你是个Python高手,但是没有前端js的经验,我可以确定的是,这丝毫不会影响你学习本文的js破解,另外,对于js的学习,最好的方式,就是直接开始硬怼js,闭着眼睛硬干,多干它几个网站,你就基本掌握了常见的js相关知识。毕竟计算机语言只是写法、功能上的差异,基本的逻辑都是相通的。

开始破解

目标网站:谷歌学术镜像搜索(http://ac.scmor.com/)

环境:win10,Python3.6,pycharm

目的:提取网页上‘现在访问’字样所对应的url。如下

首先,我们请求首页链接(http://ac.scmor.com/) ,发现response中并没有我们所要的链接,于是猜测是在点击的一瞬间生成的对应链接。

在首页打开开发者工具,点击选择元素,放到“现在访问”字样上面,发现源码中是一个a标签下的onclick事件。(不懂js的同学也没有关系,从现在开始,你至少懂得这一个js知识了)

值得注意的是,这个onclick中,带着一个visit函数,那么,我们点击搜索,直接找这个visit函数在哪个js中。如图进行搜索

刚好只有一段js文件里有这个visit函数,那么双击下面搜索到的代码,就能看到,跳转到了source下对应的js文件。如图:

可以点击图中的格式化按钮,把js进行格式化,有助于人眼查看。在搜索栏里搜索visit,可以看到visit里面对应的参数是autourl[b],而对visit的定义,从源码可以看出:先打开一个网页,在Gword不为空时,url = strdecode(url),同时把url赋值到这个按钮下

这里关系到一个Gword 值,一个是strdecode函数。下面继续找decode函数,可以看到该函数的定义如下:

这里第一行:是把string进行函数base64decode()。

第二行:生成一个key。

第三行:计算len值。

紧接着在for循环中计算得到code,最后返回的是进行base64decode后的code 。其中,fromCharCode() 可接受一个指定的 Unicode 值,然后返回一个字符串(类似Python中的chr()函数)。charCodeAt() 方法可返回指定位置的字符的 Unicode 编码(类似Python中的ord()函数)。不懂的函数都可以百度深入理解。

这个函数中此时只剩下base64decode()没有找到,继续找吧。

搜索发现生成函数的位置:

发现函数体较大,最后是把参数return回来,我们直接把函数copy过来放到本地scmor.js中,放到Python中用execjs库调用node去计算这个函数即可。同时这个函数中有个参数base64DecodeChars,搜索发现这是个常量Array,可以在js中直接复制过来即可。

至于在py脚本中对于js文件的调用方法:首先读取js文件

with open('scmor.js', 'r', encoding='utf-8') as f:js1 = f.read()ctx = execjs.compile(js1)

然后调用这个js中的函数,带上参数string即可。写法如下:

string = ctx.call('base64decode',string)

另外,Gword值,从源码中可以看到,是个常量:

最后代码运行可以得到所需链接,结果如下:

20190316最新破解。

完整代码在我GitHub上。如果对你有帮助,请点个star支持。

https://github.com/ximendadao/scmor

【python爬虫】反反爬之破解js加密--入门篇:谷歌学术镜像搜索(scmor.com)相关推荐

  1. python爬虫教程:爬取破解无线网络wifi密码过程解析

    这篇文章主要介绍了Python爬取破解无线网络密码过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 前言 今天从WiFi连接的原理,再结合代码 ...

  2. Python爬虫:爬取instagram,破解js加密参数

    Python爬虫:爬取instagram,破解js加密参数 instagram 是国外非常流行的一款社交网站,类似的还有像facebook.twitter,这些社交网站对于掌握时事热点.电商数据来源和 ...

  3. 破解js加密反爬综述

    破解js加密反爬综述 微信公众号:在敲代码啦 闲谈 上周发懒,没有更贴.结果一个小伙伴居然私我希望我周更帖,这个消息对我来说是莫大的鼓励.总是胡说八道的我居然得到了小伙伴的认可,这足以让我嘚瑟一整子. ...

  4. [Python 爬虫] 使用 Scrapy 爬取新浪微博用户信息(四) —— 应对反爬技术(选取 User-Agent、添加 IP代理池以及Cookies池 )

    上一篇:[Python 爬虫] 使用 Scrapy 爬取新浪微博用户信息(三) -- 数据的持久化--使用MongoDB存储爬取的数据 最近项目有些忙,很多需求紧急上线,所以一直没能完善< 使用 ...

  5. 一个月入门Python爬虫,轻松爬取大规模数据

    如果你仔细观察,就不难发现,懂爬虫.学习爬虫的人越来越多,一方面,互联网可以获取的数据越来越多,另一方面,像 Python这样一个月入门Python爬虫,轻松爬的编程语言提供越来越多的优秀工具,让爬虫 ...

  6. 爬虫破解js加密破解(二) 有道词典js加密参数 sign破解

    在爬虫过程中,经常给服务器造成压力(比如耗尽CPU,内存,带宽等),为了减少不必要的访问(比如爬虫),网页开发者就发明了反爬虫技术. 常见的反爬虫技术有封ip,user_agent,字体库,js加密, ...

  7. python抓取文献关键信息,python爬虫——使用selenium爬取知网文献相关信息

    python爬虫--使用selenium爬取知网文献相关信息 写在前面: 本文章限于交流讨论,请不要使用文章的代码去攻击别人的服务器 如侵权联系作者删除 文中的错误已经修改过来了,谢谢各位爬友指出错误 ...

  8. Python爬虫---影评的爬取

    Python爬虫-影评的爬取 介绍:爬虫练手,使用Requests库进行豆瓣影评的爬虫,做成词云图,写文章主要做一些问题解决的记录. 运行环境:python 3.8, Pycharm 关于在豆瓣爬取影 ...

  9. [Python 爬虫] 使用 Scrapy 爬取新浪微博用户信息(二) —— 编写一个基本的 Spider 爬取微博用户信息

    上一篇:[Python 爬虫] 使用 Scrapy 爬取新浪微博用户信息(一) -- 新建爬虫项目 在上一篇我们新建了一个 sina_scrapy 的项目,这一节我们开始正式编写爬虫的代码. 选择目标 ...

  10. [Python 爬虫] 使用 Scrapy 爬取新浪微博用户信息(三) —— 数据的持久化——使用MongoDB存储爬取的数据

    上一篇:[Python 爬虫] 使用 Scrapy 爬取新浪微博用户信息(二) -- 编写一个基本的 Spider 爬取微博用户信息 在上一篇博客中,我们已经新建了一个爬虫应用,并简单实现了爬取一位微 ...

最新文章

  1. C程序设计-----第1次作业
  2. hdu 1757 A Simple Math Problem 构造矩阵
  3. Android WebView 致安卓应用闪退,mPaaS 助你规避这波 Bug
  4. PeriodicityText in CRM Fiori SalesPipeline
  5. 4种实例 advice aop_《Spring实战》阅读笔记
  6. Gradle技巧–显示buildscript依赖性
  7. bat获取命令返回值_redis中list和hash的基本命令和使用场景
  8. 政企联手打造智慧城市产业
  9. jQuery+pjax简单示例汇总
  10. 持久化/Session和SessionFactory线程非安全和安全/Hibernate的优势
  11. PCL中的点云分割算法
  12. (附源码)基于PHP在线考试系统的设计与实现 毕业设计 032028
  13. mysql数据库初始化不成功_初始化mysql的数据库失败怎么办
  14. cuda学习笔记(4)
  15. 分享受用一生的高效 PyCharm 使用技巧。
  16. 用mysql编资产负债表_资产负债表如何编制!
  17. 阿里云服务器最便宜多少钱?附优惠购买教程每月仅需8元!
  18. 普转题比赛2021/7/20
  19. 数码数字字体_如何为数码单反相机选择最佳的存储卡?
  20. 微信开发者工具代码仓的管理以及错误:Push failed Error: invalid authentication scheme 的解决办法,微信小程序代码仓项目删除

热门文章

  1. 四阶行列式如何降阶_四阶行列式的计算方法
  2. xbox微软服务器崩溃了,微软的Xbox游戏条因0x803F8001错误而崩溃
  3. A problem occurred starting process 'command 'xxx
  4. 关于Release版除法反汇编的小结
  5. 扬州鉴真国际半程马拉松
  6. linux ip转发 丢包,sendto频率过快导致发送丢包
  7. 微信公众号内置浏览器缓存清理
  8. Vue进阶(幺捌零):Vue优质开源项目汇总(持续更新中...)
  9. 重庆计算机应用高级工程师,重庆高级园林工程师职称评审条件
  10. 日本python程序员工资_年轻程序员赴日本工作有前途吗?