parent
ef818c928c
commit
58e5a6c421
5 changed files with 5655 additions and 4 deletions
@ -0,0 +1,36 @@ |
|||||||
|
const express = require("express"); |
||||||
|
const router = express.Router(); |
||||||
|
const FpService = require("./service/FpService"); |
||||||
|
|
||||||
|
let UUIDUtil = require("../utils/UUIDUtil"); |
||||||
|
|
||||||
|
fpService = new FpService() |
||||||
|
|
||||||
|
router.post('/getLos', async (req, res) => { |
||||||
|
let uuid = UUIDUtil.uuid; |
||||||
|
let url = req.body.url |
||||||
|
let param = req.body.param |
||||||
|
let html = req.body.html |
||||||
|
let loginCookieStr = req.body.loginCookie |
||||||
|
console.log(`${uuid};接收到 ${param} 请求:${url} loginCookieStr: ${loginCookieStr}`) |
||||||
|
if (url==null || url==""){ |
||||||
|
return res.status(500).send("url为空") |
||||||
|
} |
||||||
|
if (loginCookieStr==null || loginCookieStr==""){ |
||||||
|
return res.status(500).send("cookie为空") |
||||||
|
} |
||||||
|
let start = new Date(); |
||||||
|
try { |
||||||
|
// 执行
|
||||||
|
let los = await fpService.get_los(url, param,html,loginCookieStr); |
||||||
|
console.log(los) |
||||||
|
res.status(200).send(los); |
||||||
|
} catch (e) { |
||||||
|
console.error(e.stack) |
||||||
|
return res.status(500).send(e.message) |
||||||
|
} finally { |
||||||
|
console.log(`${uuid};getKey ${new Date() - start} ms`) |
||||||
|
} |
||||||
|
}) |
||||||
|
|
||||||
|
module.exports = router |
@ -0,0 +1,47 @@ |
|||||||
|
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, param); |
||||||
|
|
||||||
|
console.log('js执行完成,返回结果 ',los ) |
||||||
|
// 关闭
|
||||||
|
dom.window.close() |
||||||
|
console.timeEnd('js执行时长') |
||||||
|
return los |
||||||
|
} |
||||||
|
} |
||||||
|
module.exports = FpService |
File diff suppressed because one or more lines are too long
Loading…
Reference in new issue