pyV8不支持dom操作,关于PyV8的支持DOM的疑问
pyV8不支持dom操作,關于PyV8的支持DOM的疑問
PYV8只支持純js語句。不過官方提供了w3c.py以及brower.py,可以基于此來完成,但這個用起來還是比較麻煩。
在爬取網站時,需要提交請求,其中有一個參數是執行了一大段js來得到的,本來以為用PyV8可以執行js解決的,結果由于涉及到了一點dom的東西,而原生PyV8貌似沒有自帶瀏覽器環境, 所以就會報錯,導致無法執行下去。
而PyV8給了w3c.py與browser.py可以支持dom操作,不過在頭部引入了from w3c import parseString, Document, HTMLElement,import browser 并不能解決問題。
要是涉及的DOM操作不多的話,自己模仿一下就好了,寫一些document,window,location對象,加上一些方法。反正v8支持getter,setter,defineProperty等新特性。
要是深度依賴DOM,就考慮phantom.js或者你提到的那幾個擴展庫。
使用PyV8解析HTML文檔 - 為程序員服務
http://ju.outofmemory.cn/entry/36085
加入w3c browser 模塊,可以參考下這篇文章
-----------------
PYV8只支持純js語句,不支持dom操作,而需要簽名的js后面部分參數有dom操作,現在運行報錯,生成不了簽名,把后面dom操作代碼去掉生成的簽名是錯誤的也不能用。
不需要操作他js里面的dom,只要他不報錯生成正確的簽名就可以了,他那js用到了很多dom操作,自己一個個模擬還是很麻煩的,試了定義外面的兩個變量, 到里面getElementById還是報錯,必須根據報錯一個個定義才行了。
dom操作的函數定義避免生成簽名報錯,下面是部分函數定義:
var window=function(){}; window.localStorage=function(){return this;}; window.localStorage.getItem=function(){return this;}; window.sessionStorage=function(){return this;}; window.sessionStorage.getItem=function(){return this;};var document=function(){}; document.getElementById = function(){return this;}; document.getElementById.clientHeight=function(){return this;}; document.getElementById.clientHeight.uaCheck=function(){return this;}; document.getElementById.clientHeight.uaCheck.is360se=function(){return this;};注意:如果有下級屬性的函數定義,必須在里面返回 return this; 否則下級熟悉無法定義成功的,另外這種定義方法只是為了不報錯可以執行下去,需要返回值的需要另外處理。
另:如果上述方法還是達不到目的,可以考慮使用phantomjs,phantomjs是模擬真實瀏覽器的可以最大化抓取到所有網頁,可以跟在瀏覽器控制臺一樣輸入函數獲取需要的返回值。
===================
本人微信公眾帳號: 心禪道(xinchandao)
本人微信公眾帳號:雙色球預測合買(ssqyuce)
?
總結
以上是生活随笔為你收集整理的pyV8不支持dom操作,关于PyV8的支持DOM的疑问的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 揭秘全球首次互联网8K直播背后的技术实现
- 下一篇: 解决Uncaught SyntaxErr