zoukankan      html  css  js  c++  java
  • jsdom 用法技巧

    const jsdom = require("jsdom");
    const { JSDOM } = jsdom;
    为了使用 jsdom,主要用到jsdom主模块的一个命名导出的 jsdom 构造函数。往构造器传递一个字符串,将会得到一个 jsdom 构造实例对象,这个对象有很多实用的属性,特别是 window 对象:

    const dom = new JSDOM(`<!DOCTYPE html><p>Hello world</p>`);
    console.log(dom.window.document.querySelector("p").textContent); // "Hello world"

    const dom = new JSDOM(``, {
      url: "https://example.org/",
      referrer: "https://example.com/",
      contentType: "text/html",
      userAgent: "Mellblomenator/9000",
      includeNodeLocations: true
    });

    完整用法,此处以
    http://match.yuanrenxue.com/match/2"为例
     
    // 导入jsdom
    jsdom = require('jsdom')
    // 生成jsdom对象
    const {JSDOM} = jsdom;
    // 倒入读写js的包
    const fs = require('fs')
    // 对1.html进行对去操作
    fs.readFile('./1.html', 'utf8', function (err, data) {
    //定制jsdom,data一般是js代码,由于安全策略的原因导致无法自动加载script标签
    //需要开启安全策略的开关,runScripts: "dangerously"
    //js代码直接写入会报错。所以一般在本地新建个html文件,像刚刚的1。html,然后用fs.readFile进行读取操作
    const dom = new JSDOM(data
    ,
    {
    url: "http://match.yuanrenxue.com/match/2",
    referrer: "http://match.yuanrenxue.com/match/2",
    contentType: "text/html",
    userAgent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36",
    includeNodeLocations: true,
    runScripts: "dangerously",
    }
    )
    console.log(dom.window.document.cookie);

    dom.window.close()
    })

    其中的 ./1.html是该网站第一次加载生成cookie的js代码,由于直接放在js文件里会报错,所以把他放在html里进行导入
     

    这种图片的报错一般都是reload函数的报错,可以不用管,也可以 在js代码里面找到location.reload进行删除就好了,没有影响 

    // 导入jsdom
    const jsdom = require('jsdom')
    // 生成jsdom对象
    const { JSDOM } = jsdom;
    // 倒入读写js的包
    const fs = require('fs')

    options={
    url: "http://match.yuanrenxue.com/match/2",
    referrer: "http://match.yuanrenxue.com/match/2",
    contentType: "text/html",
    userAgent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36",
    includeNodeLocations: true,
    runScripts: 'dangerously',

    cookieJar:new jsdom.CookieJar(),
    beforeParse(window) {
    window.alert();
    window.setInterval = function (s, b) {
    eval(s)
    }
    //重写之后进行伪装
    window.setInterval.toString = function () {
    "function setInterval() { [native code] }"
    }
    window.setTimeout = function (s, b) {
    eval(s)
    }
    window.setTimeout.toString = function () {
    "function setTimeout() { [native code] }"
    }
    },

    }
    // 提前植入setcookie的操作
    options.cookieJar.setCookie(cookie,url,function(val){})
    // 对1.html进行对去操作
    fs.readFile('./1.html', 'utf8', function (err, data) {
    //定制jsdom,data一般是js代码,由于安全策略的原因导致无法自动加载script标签
    //需要开启安全策略的开关,runScripts: "dangerously"
    //js代码直接写入会报错。所以一般在本地新建个html文件,像刚刚的1。html,然后用fs.readFile进行读取操作
    const dom = new JSDOM(data
    ,
    options
    )
    console.log(dom.window.document.cookie);
    //将dom窗口关闭
    dom.window.close()
    })

     
  • 相关阅读:
    python2和3使用pip时的问题
    Python爬虫-爬取百度贴吧帖子
    Python爬虫-爬取糗事百科段子
    keras例子-matchnet
    win10-Anaconda2-Theano-cuda7.5-VS2013
    caffe-win10-cifar10另
    PHP——0126最初
    PHP——动态随机数
    PHP——投票
    PHP——内测:联系人管理
  • 原文地址:https://www.cnblogs.com/wuxianyu/p/14761529.html
Copyright © 2011-2022 走看看