zoukankan      html  css  js  c++  java
  • python爬虫执行js代码-execjs

    一.安装模块

    pip install PyExecJS

    execjs会自动使用当前电脑上的运行时环境(建议用nodejs,与Phantomjs)

    二.简单的使用

    import execjs
    
    js_obj = execjs.compile('js字符串')
    js_obj.call('js字符串中方法',参数)

    三.js字符串中模拟浏览器环境

    即导入documentwindow对象

    一.安装依赖

    npm install jsdom

    二.导入包

    js_obj = execjs.compile('js字符串',cwd='node_modules')

    三.js字符串中添加抬头

    const jsdom = require("jsdom");
    const { JSDOM } = jsdom;
    const dom = new JSDOM(`<!DOCTYPE html><p>Hello world</p>`);
    window = dom.window;
    document = window.document;
    XMLHttpRequest = window.XMLHttpRequest;

    四.其它方案

    使用PhantomJS之前,需要下载它的驱动,然后放下Python代码统一目录下。对之前的Python代码也进行修改:
    import execjs
     
    import os
    os.environ["EXECJS_RUNTIME"] = "PhantomJS"
    node = execjs.get()
    file = 'eleme.js'
    ctx = node.compile(open(file).read())
    js_encode = 'getParam()'
    params = ctx.eval(js_encode)
    print(params)

    模拟浏览器用的selenium和chrome的webDriver(效率高点,可以自打开一个浏览器(都调用一个webdriver对象)),代码如下:

    复制代码
    from selenium import webdriver
     
    browser = webdriver.Chrome(executable_path='chromedriver.exe')
    with open('eleme.js', 'r') as f:
        js = f.read()
    print(browser.execute_script(js))
     
  • 相关阅读:
    北航2020OO第一单元博客作业
    OO第四单元总结
    OO第三单元总结
    OO第二单元总结
    OO第一单元总结
    北航2020年OO第四单元总结
    北航2020年OO第三单元总结
    北航2020年OO第二单元总结
    北航2020年OO第一单元总结
    面向对象第四单元总结
  • 原文地址:https://www.cnblogs.com/presleyren/p/11751050.html
Copyright © 2011-2022 走看看