zoukankan      html  css  js  c++  java
  • 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是模拟真实浏览器的可以最大化抓取到所有网页,可以跟在浏览器控制台一样输入函数获取需要的返回值。

  • 相关阅读:
    PHP mysqli扩展库 预处理技术
    libevent入门(1)
    你的项目需要升级成64bit程序吗?
    [敏捷个人]个人知识管理
    [转]职业规划中的“我想要”和“我需要”
    《领导力》读书笔记
    http 传输原理及格式
    转载:Fiddler 教程
    Nginx 配置文件详解
    Wireshark
  • 原文地址:https://www.cnblogs.com/zdz8207/p/python_learn_note_123.html
Copyright © 2011-2022 走看看