python寫爬蟲遇到需要解碼js一些記錄


js在線格式化網站
https://beautifier.io/
Python 執行 JS 代碼

NodeJS

安裝方式
先解決 JS 環境,這里推薦安裝 Node.js ,安裝方便,執行效率也高。
https://nodejs.org/zh-cn/
然后 pip install PyExecJS 就可以了。

  • 使用例子
>>> import execjs
>>> execjs.get().name  # 查看調用的環境
'Node.js (V8)'
>>> ctx = execjs.compile("""  # 執行 JS 語句
...     function add(x, y) {
...         return x + y;
...     }
... """)
>>> ctx.call("add", 1, 2)
3
>>> with open('./test.js') as f:  # 執行 JS 文件
...     ctx = execjs.compile(f.read())
...     ctx.call('add', 1, 2)

PyV8

這是 Google 官方將 Chrome V8 引擎用 Python 封裝的庫,和 PyExecJS 相比,這個庫很輕量,不需要額外裝 JS 環境,因為 V8 本身就是環境,同時也因為不需要啟動外部環境,執行速度很快。

  • 安裝方式
    Python3 安裝不要使用pip,因為官方只支持 Python2,需要在這里下載對應系統的二進制文件:github.com/emmetio/pyv…
    然后解壓后將 PyV8.py 與 _PyV8.so (如so不是這個名字需要改成這樣) 兩文件復制到 Python 的 site-packages 目錄下,如 /usr/local/lib/python3.6/site-packages 。
    使用例子
>>> import PyV8  # 注意大小寫
>>> with PyV8.JSContext() as ctx:
...     ctx.eval("""
...         function add(x, y) {
...             return x + y;
...         }
...     """)
...     ctx.locals.add(1, 2)

Js2Py

最后這個庫,作用是將 JS 代碼直接轉譯成 Python 代碼,這種方式可以擺脫調用 JS 環境的瓶頸,但遺憾的是如果用於很長的混淆 JS 代碼,轉譯過來的大概率會報錯… 所以只建議先嘗試一下,如果報錯及時更換上面的庫。
安裝方式
pip install js2py
使用例子

>>> import js2py
>>> add = js2py.eval_js("""
...     function add(x, y) {
...         return x + y;
...     }
... """)
>>> add  # 可以看到大括號里已被轉譯
'function add(x, y) { [python code] }'
>>> add(1, 2)
3
>>> # 使用下邊這個方法可以輸出轉譯后的代碼
>>> # 可以保存到文件里,下次不需要再次轉譯
>>> print(js2py.translate_js('var x = 1'))
from js2py.pyjs import *
# setting scope
var = Scope( JS_BUILTINS )
set_global_object(var)

# Code follows:
var.registers(['x'])
var.put('x', Js(1.0))

來源:忘記了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM