怎么构造饼干应对python反爬虫

  介绍

小编给大家分享一下怎么构造饼干应对python反爬虫,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!

饼干大约有10个字段,经过反复测试,能让网站正常返回的只需要两个字段,分别为__jsluid_h=011 a522dbxxxxxxxxc1ce59d336e5e60和__jsl_clearance=1581880640.794 | 0 | trTB4c6b % 2 bzpvxxxxxxxx8yqcooo % 3 d(中间打码处理)。

饼干,默认会返回__jsluid_h:

怎么构造饼干应对python反爬虫


js脚本保存下来,包装成一个html文件打开,发现浏览器不停的刷新,也并没起什么作用。那就分析一下js脚本,原来的代码是单行的,自己整理一下并加了一些变量名和日志,大概是这么个样子:

怎么构造饼干应对python反爬虫

16行的变量cmd打印出来看看,发现是另一段类似的脚本:

怎么构造饼干应对python反爬虫


饼干的__jsl_clearence字段了。这些显然就是混淆后的js脚本,但是分析到这里也就大概弄明白了从发送请求到网站返回是怎么回事。之所以在本地跑这段代码会不断刷新,是因为第二行的setTimeout会让其在1.5秒后重新请求,但是我们本地没有服务处理请求让其停止,所以会不断的刷新。

y是完整的js代码,代码中的变量名和关键字被进行编码了,变量x存储的是用来替换的变量名和关键字,后面是解码函数。所以现在的问题变成了获取第一段脚本当中的cmd代码,执行后再获取第二段代码的文档。饼干的内容即可。

python和js的交互我完全没接触过,尝试了PyExecJS和Js2Py,都没办法正常执行第一段脚本。无奈之下,我用python复现了第一段脚本,然后用Js2Py获取了饼干。在请求一次过后,构造饼干,再请求一次,就可以了:

def 测试():   ,,,url =REQUEST_URL   ,,,#,url =, & # 39; https://www.baidu.com& # 39;   ,,,request_header =, get_header ()   ,,,html =, requests.get (url,头=request_header)   ,,,印刷(html)   ,,,jscode =html.text   ,,,#,打印(jscode)   ,,,#,tryjs.get_cookies()为复现的js代码,以及用Js2Py获取饼干的代码   ,,,request_cookies =, try_js.get_cookies (jscode)   ,,,request_cookies  +=, & # 39;; __jsluid_h=& # 39;, +, html.cookies [& # 39; __jsluid_h& # 39;】   ,,,request_header[& # 39;饼干# 39;],=request_cookies   ,,,印刷(request_header)   ,,,html =, requests.get (url,标题=request_header,超时=5)   ,,,print (& # 39; new 连接# 39;)   ,,,印刷(html)   ,,,印刷(html.text)

怎么构造饼干应对python反爬虫