You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
1.8 KiB
49 lines
1.8 KiB
const {jsdomFromText, browser} = require("sdenv"); |
|
const {Script} = require("node:vm"); |
|
const fs = require("node:fs"); |
|
const path = require("node:path"); |
|
class FpService { |
|
js = fs.readFileSync(path.resolve(__dirname, './static/fp/chunk-npjg4qgmmrfrjl3r.js'), 'utf8').toString(); |
|
|
|
async get_los (url, param,html,loginCookieStr) { |
|
let baseUrl = new URL(url).origin; |
|
console.time('js执行时长') |
|
const [jsDom, cookieJar] = jsdomFromText({ |
|
url: `${baseUrl}/invoice-query/invoice-query`, |
|
referrer: baseUrl, |
|
userAgent: 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36', |
|
contentType: "text/html", |
|
runScripts: "outside-only", // runScripts: 'dangerously'/'outside-only' |
|
}) |
|
// 加载dom |
|
let dom = await jsDom(html); |
|
const window = dom.window |
|
|
|
// 设置 cookie |
|
for (let cookie of loginCookieStr.trim().split("; ")) { |
|
cookieJar.setCookieSync(cookie, baseUrl); |
|
} |
|
|
|
browser(window, 'chrome'); |
|
// 加载js |
|
let script = new Script(this.js); |
|
let internalVMContext = dom.getInternalVMContext(); |
|
// 执行 js |
|
script.runInContext(internalVMContext, {timeout: 1000}); |
|
|
|
if (window.$dunm.$byno) { |
|
window.$dunm.$byno(); |
|
} |
|
|
|
let los = window[window["_d_ts"]](url.replace(baseUrl,""), param); |
|
console.log(url.replace(baseUrl,"")) |
|
let cookies = cookieJar.getCookieStringSync(baseUrl); |
|
los["cookies"] = cookies |
|
console.log('js执行完成,返回结果 ',los ) |
|
// 关闭 |
|
dom.window.close() |
|
console.timeEnd('js执行时长') |
|
return los |
|
} |
|
} |
|
module.exports = FpService |