|
|
|
@ -13,11 +13,11 @@ let store = new Store(); |
|
|
|
|
router.post('/rsCookie', async (req, res) => { |
|
|
|
|
console.time('rsCookie') |
|
|
|
|
let url = req.body['url']; |
|
|
|
|
let htmlStr = req.body['htmlStr']; |
|
|
|
|
let jsStr = req.body['jsText']; |
|
|
|
|
let areaName = req.body['areaName']; |
|
|
|
|
let cookie = req.body['cookie']; |
|
|
|
|
let userAgent = req.body['userAgent']; |
|
|
|
|
let htmlStr = req.body['htmlBase64']; |
|
|
|
|
let jsStr = req.body['cookieBase64']; |
|
|
|
|
let cookie = req.body['cookieBase64']; |
|
|
|
|
let userAgent = req.body['userAgentBase64']; |
|
|
|
|
|
|
|
|
|
if (url == null || url === '') { |
|
|
|
|
return res.send('error url') |
|
|
|
@ -45,17 +45,17 @@ router.post('/rsCookie', async (req, res) => { |
|
|
|
|
jsText, |
|
|
|
|
cookie != null ? Buffer.from(cookie, 'base64').toString('utf-8') : null, |
|
|
|
|
userAgent != null ? Buffer.from(userAgent, 'base64').toString('utf-8') : null) |
|
|
|
|
res.send(cookies); |
|
|
|
|
res.status(200).send(cookies); |
|
|
|
|
} catch (e) { |
|
|
|
|
console.error(e) |
|
|
|
|
return res.send(e.toString()) |
|
|
|
|
return res.status(500).send(e.toString()) |
|
|
|
|
} finally { |
|
|
|
|
console.timeEnd('rsCookie') |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
function loadJs(window) { |
|
|
|
|
function loadJs(window, jsText) { |
|
|
|
|
// 加载js
|
|
|
|
|
let js = ''; |
|
|
|
|
// 加载 页面上的js
|
|
|
|
@ -89,7 +89,7 @@ async function handle(url, htmlStr, jsText, cookie, userAgent) { |
|
|
|
|
cookieJar.setCookieSync(cookie, baseUrl); |
|
|
|
|
} |
|
|
|
|
// 加载dom
|
|
|
|
|
const dom = await jsDom(htmlStr); |
|
|
|
|
let dom = await jsDom(htmlStr); |
|
|
|
|
window = dom.window |
|
|
|
|
// js执行成功后的瑞树会跳转页面 会触发onbeforeunload钩子
|
|
|
|
|
window.onbeforeunload = async (url) => { |
|
|
|
@ -101,13 +101,18 @@ async function handle(url, htmlStr, jsText, cookie, userAgent) { |
|
|
|
|
// 初始化浏览器
|
|
|
|
|
browser(window, 'chrome'); |
|
|
|
|
// 加载js
|
|
|
|
|
let js = loadJs(window); |
|
|
|
|
let js = loadJs(window, jsText); |
|
|
|
|
// 执行 js
|
|
|
|
|
let script = new Script(js); |
|
|
|
|
let internalVMContext = dom.getInternalVMContext(); |
|
|
|
|
script.runInContext(internalVMContext); |
|
|
|
|
// 等待 onbeforeunload 钩子触发后的回掉
|
|
|
|
|
let val = await store.waitGetAndDelete(uuid, 100, 10) |
|
|
|
|
|
|
|
|
|
internalVMContext.close() |
|
|
|
|
window.close() |
|
|
|
|
dom = null |
|
|
|
|
|
|
|
|
|
if (val != null) { |
|
|
|
|
return val; |
|
|
|
|
} |
|
|
|
|