编程语言
首页 > 编程语言> > python使用execjs,把web程序员使用js的问题突破

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日,目前上面方法是可以使用的。有问题可以交流。

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

标签:npm,web,python,代码,js,window,jsdom,JS
来源: https://blog.csdn.net/songcau/article/details/120677464