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()
})

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM