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