python使用execjs,把web程序员使用js的问题突破

做爬虫过程中,常常有些web程序员,喜欢在网页JS中做一些变量,常见的方法是用正则匹配。

但是如果有人用了复杂的JS,变量取不到,怎么办?直接用ececjs,在你的Python代码中,

1、先下载获取的网页代码,

2、提取网页代码中的js ,可以用正则表达式匹配,较为简单

3、接下来就是把取得的js代码跑起来,下面就是如何把取得的代码跑起来的过程。

使用execjs常见的一些报错如下,网上我整理一下

1、解决window 未定义
2、解决$未定义


步骤如下
前提是安装node.js
Windows下,cmd命令行下执行安装
1、安装jsdom

 npm i jsdom -g


2、安装  jquery 代码如下

npm i jquery -g

3、查询全局引用路径,保存用于后面使用

npm root -g

返回(我的电脑的返回结果)

C:\Users\Administrator\AppData\Roaming\npm\node_modules


下面是在pycharm中编写代码

1、在JS代码前添加如下

jsdomstr='''
var jsdom = require('jsdom');
const { JSDOM } = jsdom;
const { window } = new JSDOM();
const { document } = (new JSDOM('')).window;
global.document = document;
var $ = jQuery = require('jquery')(window);
'''

2、字符串组合

import execjs

txt_getUrl_js=  '  function doit(){return 调用他人页面中的变量; }  ' 


strt=jsdomstr  + 你下载的网页中的js代码 + 自定义js脚本代码,用于你随心所欲的调用别人的js生成的参数

#注意这一步:windows下使用如下命令,查询  npm root -g
#得到 C:\Users\Administrator\AppData\Roaming\npm\node_modules

js=execjs.compile(strt,cwd=r'C:\Users\Administrator\AppData\Roaming\npm\node_modules')

result=js.call('doit')
print(result)

'下面就是自由发挥的时间,你可以查询任何网页中JS返回的参数。想用js拦住你的时代,过去了。

可以去试试你认为不可能的网站,生成什么ua,token等等。

这篇文章写于2021年10月9日,目前上面方法是可以使用的。有问题可以交流。

如果有细节不懂留言,我看到后会回复。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值