背景:爬某網(wǎng)站數(shù)據(jù)。需要攜帶參數(shù)發(fā)POST請求峰搪,參數(shù)在網(wǎng)頁js中岔冀,js太復(fù)雜,不便用python模擬概耻。所以直接用python執(zhí)行js函數(shù)使套,得到參數(shù)。
- 導(dǎo)入包
import PyV8
- 創(chuàng)建一個jsContext對象并進(jìn)入
ctxt = PyV8.JSContext()
ctxt.enter()
- eval一下想要執(zhí)行的js的代碼鞠柄,或者包含你需要的js代碼的源文件
ctxt.eval(""" function createGuid() {
return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
}
createGuid() + createGuid() + "-" + createGuid() + "-" + createGuid() + createGuid() + "-" + createGuid() + createGuid() + createGuid(); """)
- 接下來就可以使用這個ctxt來執(zhí)行js腳本了
- 建議使用 with 語句
>>> with PyV8.JSContext() as ctxt:
... ctxt.enter()
... print ctxt.eval(""" function createGuid() {return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);}createGuid() + createGuid() + "-" + createGuid() + "-" + createGuid() + createGuid() + "-" + createGuid() + createGuid() + createGuid(); """)
...
58076022-485c-70707e9f-2e4e2d2e055e
Python 和 Js 之間的變量交互
- Python 取 Js 里面的值
import PyV8
with PyV8.JSContext() as env1:
env1.eval("""
var_i = 1;
var_f = 1.0;
var_s = "test";
var_b = true;
""")
vars = env1.locals
var_i = vars.var_i
print var_i
- Js 取 Python 里面的值
import PyV8
with PyV8.JSContext() as env1:
env1.securityToken = "foo"
env1.locals.prop = 3
print int(env1.eval("prop"))