commit
a2f3434f4a
26 changed files with 5875 additions and 0 deletions
@ -0,0 +1,2 @@ |
|||||||
|
/node_modules/ |
||||||
|
/dict/ |
@ -0,0 +1,5 @@ |
|||||||
|
# Default ignored files |
||||||
|
/shelf/ |
||||||
|
/workspace.xml |
||||||
|
# Editor-based HTTP Client requests |
||||||
|
/httpRequests/ |
@ -0,0 +1,6 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<project version="4"> |
||||||
|
<component name="JavaScriptLibraryMappings"> |
||||||
|
<includedPredefinedLibrary name="Node.js Core" /> |
||||||
|
</component> |
||||||
|
</project> |
@ -0,0 +1,8 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<project version="4"> |
||||||
|
<component name="ProjectModuleManager"> |
||||||
|
<modules> |
||||||
|
<module fileurl="file://$PROJECT_DIR$/.idea/qry-python-js.iml" filepath="$PROJECT_DIR$/.idea/qry-python-js.iml" /> |
||||||
|
</modules> |
||||||
|
</component> |
||||||
|
</project> |
@ -0,0 +1,12 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<module type="WEB_MODULE" version="4"> |
||||||
|
<component name="NewModuleRootManager"> |
||||||
|
<content url="file://$MODULE_DIR$"> |
||||||
|
<excludeFolder url="file://$MODULE_DIR$/.tmp" /> |
||||||
|
<excludeFolder url="file://$MODULE_DIR$/temp" /> |
||||||
|
<excludeFolder url="file://$MODULE_DIR$/tmp" /> |
||||||
|
</content> |
||||||
|
<orderEntry type="inheritedJdk" /> |
||||||
|
<orderEntry type="sourceFolder" forTests="false" /> |
||||||
|
</component> |
||||||
|
</module> |
@ -0,0 +1,6 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<project version="4"> |
||||||
|
<component name="VcsDirectoryMappings"> |
||||||
|
<mapping directory="$PROJECT_DIR$" vcs="Git" /> |
||||||
|
</component> |
||||||
|
</project> |
@ -0,0 +1,32 @@ |
|||||||
|
const express = require('express'); |
||||||
|
const bodyParser = require('body-parser'); |
||||||
|
|
||||||
|
|
||||||
|
const rs = require("./routes"); |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 初始化框架,并将初始化后的函数给予 '当前页面'全局变量 app |
||||||
|
* 也就是说, app 是 express |
||||||
|
*/ |
||||||
|
const app = express(); |
||||||
|
|
||||||
|
|
||||||
|
/* 配置框架环境 S */ |
||||||
|
// 设置 express 的中间件 body-parser
|
||||||
|
app.use(bodyParser.json()); |
||||||
|
app.use(bodyParser.urlencoded({extended: true})); |
||||||
|
|
||||||
|
// 设置 public 为静态文件的存放文件夹
|
||||||
|
// app.use('/public', express.static('public'));
|
||||||
|
|
||||||
|
|
||||||
|
/* 配置框架环境 E */ |
||||||
|
app.use("/", rs); |
||||||
|
|
||||||
|
|
||||||
|
const server = app.listen(8081, "0.0.0.0", () => { |
||||||
|
const host = server.address().address; |
||||||
|
const port = server.address().port; |
||||||
|
console.log("Node.JS 服务器已启动,访问地址: http://%s:%s", host, port) |
||||||
|
}); |
@ -0,0 +1,24 @@ |
|||||||
|
#!/bin/sh |
||||||
|
password=liudongqi |
||||||
|
|
||||||
|
cd ../../ |
||||||
|
mkdir dict |
||||||
|
tar -vczf ./dict/dict.tar.gz --exclude='./docs' --exclude='./dict' * |
||||||
|
|
||||||
|
# sftp 上传 |
||||||
|
/usr/bin/expect <<-EOF |
||||||
|
set timeout -1 |
||||||
|
spawn sftp -P 60022 liudongqi@oxxokclwrj-public.bastionhost.aliyuncs.com |
||||||
|
expect { |
||||||
|
"*yes/no" { send "yes\r"; exp_continue } |
||||||
|
"*password:" { send "$password\r" } |
||||||
|
} |
||||||
|
expect "sftp>" |
||||||
|
send "cd ssh_deploy@qry-test-uat-fetch_172.16.31.221:22\r" |
||||||
|
expect "sftp>" |
||||||
|
send "put ./dict/dict.tar.gz ./rsjs/qry-python-js/dict.tar.gz\r" |
||||||
|
expect "sftp>" |
||||||
|
send "exit\r" |
||||||
|
# interact |
||||||
|
EOF |
||||||
|
echo "upload success" |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,17 @@ |
|||||||
|
{ |
||||||
|
"name": "qry-python-js", |
||||||
|
"version": "1.0.0", |
||||||
|
"description": "", |
||||||
|
"main": "app.js", |
||||||
|
"scripts": { |
||||||
|
"test": "echo \"Error: no test specified\" && exit 1" |
||||||
|
}, |
||||||
|
"keywords": [], |
||||||
|
"author": "", |
||||||
|
"license": "ISC", |
||||||
|
"dependencies": { |
||||||
|
"body-parser": "^1.20.2", |
||||||
|
"express": "^4.19.2", |
||||||
|
"sdenv": "^0.2.2" |
||||||
|
} |
||||||
|
} |
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -0,0 +1,9 @@ |
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
||||||
|
<html> |
||||||
|
<head> |
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> |
||||||
|
<meta content="nMHVqmrXqt7pfGxC9d5Qn7GsapHQlUKq" r="m"><!--[if lt IE 9]><script r='m'>document.createElement("section")</script><![endif]--><script type="text/javascript" r='m'>$_ts=window['$_ts'];if(!$_ts)$_ts={};$_ts.nsd=35801;$_ts.cd="qxfqrrAloaEqcs3EDGAbcqEqDGEFqS93qGqeqpLDDpGFrrLmHqaErrLFxS9drAEqDG3FrS93DGERHnAFqp9dqfLDkq9lhrLqDsZPDGlbcqEqDGQFrr93qGqFxpLkDpGcqrLrDG3RDqEqDPWFrp93rGVWcGA2DGqRHaV2qrLoDGARDqEqDGEFqS93HA3RHaWcqrLlDGVREq3mkcnRqsVSrAVnHR9OoTFplmo2Bed.AdlcOdJzPj9wTdUCTfQ5BMtGJaHueoqkrkAorqb3hqqHUvabHHVzQ9ykAoTmC0NPsUW6WOdkJ2xDRcV5VBwCMC9NFUm2e1ezQD2.tDI7MCZNF6xLRMYzwb2NKPG.LmpEpTlaVlMpJYmWFmZaUty_MCrtpP3uabTCFK9.FvuTMne.QDzLxIwCMC9NFUm2e1ezQD2.K1K4ibR639TSpdyF1UReF2z2eb96Qvqdw1XOKDTaFK7LR5SBMn2.Qbf2zKTCFK9.FvuTMne.QDzLYhVfAKfE10S8LmNsAbzksTHjFUQSsCYZ1h7yKDzaFCG2e6RBF12NQKUThCTaFK7LR5SBMn2.Qbf2ScZfp970ImO73o2z10AC1jTmKOSkw9fdCclyUbznFDKTKmGvtbR03h3zt1QNQ6RZdmy8tKznFDKTMURNF1zjIHYBhCzaFCfVz1mqK9ySMloY8sA6V0WjKeTxpYLZICJgXu23F6r.FcU6wbeNtK2SRIVBMUrNFnfv4DeBtKznFDUlhnmEYoYpijgSV0Trwbza46RbJbf7tbk8Es28F6xLRMYzwb2NtCNZeKZBF6r.FcU6wbeNtK2SRIY8hnw9JTyiuC21RbpasYc.YnTxFsQ0WwplEse8FUm2e1ezQD2.tDI7MCZNF6xLRMYzwb2NtCNZeKe8t1wOwDsKYlYBWlR5swfswsSApoxuZbRcxueQFvuTMne.QDzLxIwCMC9NFUm2e1ezQD2.tDI7MCe3t1YOWIenQlxUwomq50pJMlyupKHTUox0xuTIR5SBMn2.Qbf2zKTCFK9.FvuTMne.QDzLxIwCMC23tnRb6VwMs63nw6i6wKNYw6mJMt2BsYxlxsy1e6RBF12NQKUThCTaFK7LR5SBMn2.Qbf2zKTCFK2FtcBC3vmYITYMRWT0MmrWWCg_4CfKFTrbxOHcMURNF1zIV.773vY7tcLOXne6w6rPKY1TMURNF1zjIHYBhCzaFCG2e6RBFYG.xv4rJCypQsQ08iG_RTYGRV2m6YzvJKA2H2h6wbeNtK2SRIVBMUrNFnfv4DeBtKznFDKTMURNFYNyxIwCMC23kAVo5uNHRkT0wY_PwUEasDpD8HagJTJcQOYS5mQgUsJJFlMGw035JUxJKdYCYkA53DzoLoRVWKa6MVhOiDqaw6e5VizNVYl6MueP_lz1FVwHFuvEwbG5R9pGQe7_KKerAKe_zul_WKR9Hkj6FUq51KrvRzf21vaS1oESzul_WKR9Hkj6FUq5FYRNVFzAJ0Sq3Up_zul_WKR9Hkj6FUq5YKrCMIyuYYSBRYm.zC2aHOSzIbdk12pNYbfAAFxMY2YUMO3dLkVnRTEZwDO88KxWsKSDM876iDEnUCNJTsN2WbRu3c8.iOwbROZ6xdJaiopPFUpA6DECIuTsMP8.iOwbROZ6xdJaic76HOrj5O7atCe0rqbRqOWmrkVlDdm6w6VdJOVejOl_WOQdJuifWaWkJugaFBL4qa30WkVx9uEuHs3CWucNJuWmqsWTH_9kl4Uuyf3u8GNtEXQetSMwCGEmmFHNC06jopb6kN0tbG3DqGloxm35ITWAsUrIPKNQNf0t2_hGptk3ntVjJHUY1Z.xRsINcRq0iOQnJul5LkQkrkAokOPXWOWTJO3ZWt9ktmNuWYpXeDxjJoxIUlCG8bT6wKJxFX22s6ezs0r.dvpUIVRqw2dSV9eIpkqlcR9cJaVlJaAE.Gh0WvZ.RKO_hCxLwnz28BAB3vJ7tCRLZPefRol.RbsNhCm7FnzvxINP312bwoQ25vrTtKRLF1U_Q6WN3KRaxITBMn2fFDQ2dKS6tKmLR6DTRvzGtKx.IMY2MCAN3KfjzKY7Fn2fF6CTRKS.Q1zOMI7BRDSOtCJuzKp.FP2BFobTF6JTtKeaF.Yj3DLNMbNGzKNz3n2XFvjTFvrjtKT6xIJPQ12BwCW2Z6Jb3P2zwCM6hC29QC3LRIrfhC2j3cf9ZDQBFoVutDsN3PeLWK3LRi9ahCfT3cf9ZvVBFDNOtDsCw1eLMDLLRi2uhCfCMPf9_KR9tKN2MPUC3o7NFbrOxIRB312jFCl2evw2tUY5tovG3ceTRoAL8IyXh6YTFPfy_UqBwUYutoveR1eTwUJZx82zRc2TMbQ2_KejtUY03cULFbVNwoJZx8zPh6wLt6RLeceSFoJ2toBZRce63oAL85T2h6w9w1f_ePeaRC9.wCdfh6rnRcz6IBZBQoJPt6wa_Pe6RoQ.QDOOh6w73nza3He2h6mjwUR7e6QBQUTuto6zR1euwbWLI5Nah6JCQcfdgKQBQbNf3PUXMDYOJnzuRiZBwDf9t6JL4ne0wU3.IDB0h6zTFczZR8LB8C2CInfS_bZBIKf.toiT8KNTtKR03.YuMCSCQnfG_KEkrAVkKn64WaWrKPJG3N9oUclfVGAJSPwjYAVmWsjRqsEerA3TcRGn";if($_ts.lcd)$_ts.lcd();</script><script type="text/javascript" charset="utf-8" src="/c5rxzYrjRT2h/cCdzB9ZjDFks.294cc83.js" r='m'></script></head> |
||||||
|
<body> |
||||||
|
</body> |
||||||
|
</html> |
||||||
|
<script type="text/javascript" r='m'>_$aH();</script> |
File diff suppressed because one or more lines are too long
@ -0,0 +1,5 @@ |
|||||||
|
{ |
||||||
|
"nsd": 35801, |
||||||
|
"cd": "qxfqrrAloaEqcs3EDGAbcqEqDGEFqS93qGqeqpLDDpGFrrLmHqaErrLFxS9drAEqDG3FrS93DGERHnAFqp9dqfLDkq9lhrLqDsZPDGlbcqEqDGQFrr93qGqFxpLkDpGcqrLrDG3RDqEqDPWFrp93rGVWcGA2DGqRHaV2qrLoDGARDqEqDGEFqS93HA3RHaWcqrLlDGVREq3mkcnRqsVSrAVnHR9OoTFplmo2Bed.AdlcOdJzPj9wTdUCTfQ5BMtGJaHueoqkrkAorqb3hqqHUvabHHVzQ9ykAoTmC0NPsUW6WOdkJ2xDRcV5VBwCMC9NFUm2e1ezQD2.tDI7MCZNF6xLRMYzwb2NKPG.LmpEpTlaVlMpJYmWFmZaUty_MCrtpP3uabTCFK9.FvuTMne.QDzLxIwCMC9NFUm2e1ezQD2.K1K4ibR639TSpdyF1UReF2z2eb96Qvqdw1XOKDTaFK7LR5SBMn2.Qbf2zKTCFK9.FvuTMne.QDzLYhVfAKfE10S8LmNsAbzksTHjFUQSsCYZ1h7yKDzaFCG2e6RBF12NQKUThCTaFK7LR5SBMn2.Qbf2ScZfp970ImO73o2z10AC1jTmKOSkw9fdCclyUbznFDKTKmGvtbR03h3zt1QNQ6RZdmy8tKznFDKTMURNF1zjIHYBhCzaFCfVz1mqK9ySMloY8sA6V0WjKeTxpYLZICJgXu23F6r.FcU6wbeNtK2SRIVBMUrNFnfv4DeBtKznFDUlhnmEYoYpijgSV0Trwbza46RbJbf7tbk8Es28F6xLRMYzwb2NtCNZeKZBF6r.FcU6wbeNtK2SRIY8hnw9JTyiuC21RbpasYc.YnTxFsQ0WwplEse8FUm2e1ezQD2.tDI7MCZNF6xLRMYzwb2NtCNZeKe8t1wOwDsKYlYBWlR5swfswsSApoxuZbRcxueQFvuTMne.QDzLxIwCMC9NFUm2e1ezQD2.tDI7MCe3t1YOWIenQlxUwomq50pJMlyupKHTUox0xuTIR5SBMn2.Qbf2zKTCFK9.FvuTMne.QDzLxIwCMC23tnRb6VwMs63nw6i6wKNYw6mJMt2BsYxlxsy1e6RBF12NQKUThCTaFK7LR5SBMn2.Qbf2zKTCFK2FtcBC3vmYITYMRWT0MmrWWCg_4CfKFTrbxOHcMURNF1zIV.773vY7tcLOXne6w6rPKY1TMURNF1zjIHYBhCzaFCG2e6RBFYG.xv4rJCypQsQ08iG_RTYGRV2m6YzvJKA2H2h6wbeNtK2SRIVBMUrNFnfv4DeBtKznFDKTMURNFYNyxIwCMC23kAVo5uNHRkT0wY_PwUEasDpD8HagJTJcQOYS5mQgUsJJFlMGw035JUxJKdYCYkA53DzoLoRVWKa6MVhOiDqaw6e5VizNVYl6MueP_lz1FVwHFuvEwbG5R9pGQe7_KKerAKe_zul_WKR9Hkj6FUq51KrvRzf21vaS1oESzul_WKR9Hkj6FUq5FYRNVFzAJ0Sq3Up_zul_WKR9Hkj6FUq5YKrCMIyuYYSBRYm.zC2aHOSzIbdk12pNYbfAAFxMY2YUMO3dLkVnRTEZwDO88KxWsKSDM876iDEnUCNJTsN2WbRu3c8.iOwbROZ6xdJaiopPFUpA6DECIuTsMP8.iOwbROZ6xdJaic76HOrj5O7atCe0rqbRqOWmrkVlDdm6w6VdJOVejOl_WOQdJuifWaWkJugaFBL4qa30WkVx9uEuHs3CWucNJuWmqsWTH_9kl4Uuyf3u8GNtEXQetSMwCGEmmFHNC06jopb6kN0tbG3DqGloxm35ITWAsUrIPKNQNf0t2_hGptk3ntVjJHUY1Z.xRsINcRq0iOQnJul5LkQkrkAokOPXWOWTJO3ZWt9ktmNuWYpXeDxjJoxIUlCG8bT6wKJxFX22s6ezs0r.dvpUIVRqw2dSV9eIpkqlcR9cJaVlJaAE.Gh0WvZ.RKO_hCxLwnz28BAB3vJ7tCRLZPefRol.RbsNhCm7FnzvxINP312bwoQ25vrTtKRLF1U_Q6WN3KRaxITBMn2fFDQ2dKS6tKmLR6DTRvzGtKx.IMY2MCAN3KfjzKY7Fn2fF6CTRKS.Q1zOMI7BRDSOtCJuzKp.FP2BFobTF6JTtKeaF.Yj3DLNMbNGzKNz3n2XFvjTFvrjtKT6xIJPQ12BwCW2Z6Jb3P2zwCM6hC29QC3LRIrfhC2j3cf9ZDQBFoVutDsN3PeLWK3LRi9ahCfT3cf9ZvVBFDNOtDsCw1eLMDLLRi2uhCfCMPf9_KR9tKN2MPUC3o7NFbrOxIRB312jFCl2evw2tUY5tovG3ceTRoAL8IyXh6YTFPfy_UqBwUYutoveR1eTwUJZx82zRc2TMbQ2_KejtUY03cULFbVNwoJZx8zPh6wLt6RLeceSFoJ2toBZRce63oAL85T2h6w9w1f_ePeaRC9.wCdfh6rnRcz6IBZBQoJPt6wa_Pe6RoQ.QDOOh6w73nza3He2h6mjwUR7e6QBQUTuto6zR1euwbWLI5Nah6JCQcfdgKQBQbNf3PUXMDYOJnzuRiZBwDf9t6JL4ne0wU3.IDB0h6zTFczZR8LB8C2CInfS_bZBIKf.toiT8KNTtKR03.YuMCSCQnfG_KEkrAVkKn64WaWrKPJG3N9oUclfVGAJSPwjYAVmWsjRqsEerA3TcRGn", |
||||||
|
"metaContent": "nMHVqmrXqt7pfGxC9d5Qn7GsapHQlUKq" |
||||||
|
} |
File diff suppressed because one or more lines are too long
@ -0,0 +1,137 @@ |
|||||||
|
const express = require("express"); |
||||||
|
const router = express.Router(); |
||||||
|
|
||||||
|
const {jsdomFromText, browser} = require("sdenv"); |
||||||
|
const {Script} = require("vm"); |
||||||
|
const fs = require("node:fs"); |
||||||
|
const path = require("node:path"); |
||||||
|
const crypto = require("crypto") |
||||||
|
|
||||||
|
|
||||||
|
let sleep = ms => new Promise(resolve => setTimeout(resolve, ms)); |
||||||
|
|
||||||
|
|
||||||
|
const storeCookie = new Map; |
||||||
|
|
||||||
|
const areaJsMap = { |
||||||
|
"yunnan": path.resolve(__dirname, '../public/yunnan/MO5zzCMcub4d.b4c45da.js'), |
||||||
|
"hubei": path.resolve(__dirname, '../public/hubei/5PXGXoOF7eGJ.ed63b8f.js'), |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
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']; |
||||||
|
|
||||||
|
if (url == null || url === '') { |
||||||
|
return res.send('error url') |
||||||
|
} |
||||||
|
if (htmlStr == null || htmlStr === '') { |
||||||
|
return res.send('error html') |
||||||
|
} |
||||||
|
|
||||||
|
try { |
||||||
|
let jsText; |
||||||
|
if (jsStr == null) { |
||||||
|
let jsPath = areaJsMap[areaName]; |
||||||
|
if (jsPath == null) { |
||||||
|
console.error('未找到js文件') |
||||||
|
return res.send('未找到js文件') |
||||||
|
} |
||||||
|
jsText = fs.readFileSync(jsPath).toString('utf8'); |
||||||
|
} else { |
||||||
|
jsText = Buffer.from(jsStr, 'base64').toString('utf-8') |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
let cookies = await handle(url, |
||||||
|
Buffer.from(htmlStr, 'base64').toString('utf-8'), |
||||||
|
jsText, |
||||||
|
cookie != null ? Buffer.from(cookie, 'base64').toString('utf-8') : null, |
||||||
|
userAgent != null ? Buffer.from(userAgent, 'base64').toString('utf-8') : null) |
||||||
|
res.send(cookies); |
||||||
|
} catch (e) { |
||||||
|
console.error(e) |
||||||
|
return res.send(e.toString()) |
||||||
|
} finally { |
||||||
|
console.timeEnd('rsCookie') |
||||||
|
} |
||||||
|
|
||||||
|
}) |
||||||
|
|
||||||
|
async function handle(url, htmlStr, jsText, cookie, userAgent) { |
||||||
|
let uuid = crypto.randomUUID() |
||||||
|
|
||||||
|
// 获取 origin
|
||||||
|
let baseUrl = new URL(url).origin; |
||||||
|
|
||||||
|
const [jsDom, cookieJar] = await jsdomFromText({ |
||||||
|
url: url, |
||||||
|
referrer: url, |
||||||
|
userAgent: userAgent, |
||||||
|
contentType: "text/html", |
||||||
|
runScripts: "outside-only", // runScripts: 'dangerously'/'outside-only'
|
||||||
|
}) |
||||||
|
// 设置 cookie
|
||||||
|
if (cookie != null) { |
||||||
|
cookieJar.setCookieSync(cookie, baseUrl); |
||||||
|
} |
||||||
|
// 加载dom
|
||||||
|
const dom = await jsDom(htmlStr); |
||||||
|
|
||||||
|
window = dom.window |
||||||
|
// 加载 页面上的js
|
||||||
|
const allScript = window.document.querySelectorAll('script[r="m"]'); |
||||||
|
|
||||||
|
// let $ = cheerio.load(htmlStr);
|
||||||
|
// let nextAll = $('script[r=m]');
|
||||||
|
|
||||||
|
let js = ''; |
||||||
|
allScript.forEach(script=>{ |
||||||
|
let attr = script.textContent; |
||||||
|
if (attr) { |
||||||
|
js += attr |
||||||
|
} else { |
||||||
|
js += jsText |
||||||
|
} |
||||||
|
js += ";\n" |
||||||
|
}) |
||||||
|
// allScript.each((script) => {
|
||||||
|
//
|
||||||
|
// })
|
||||||
|
|
||||||
|
// 执行完成后的钩子
|
||||||
|
window.onbeforeunload = async (url) => { |
||||||
|
const cookies = cookieJar.getCookieStringSync(baseUrl); |
||||||
|
// console.debug(`${url} 生成cookie:`, cookies);
|
||||||
|
storeCookie.set(uuid, cookies) |
||||||
|
// window.close();
|
||||||
|
return cookies; |
||||||
|
} |
||||||
|
|
||||||
|
browser(dom.window, 'chrome'); |
||||||
|
|
||||||
|
let script = new Script(js); |
||||||
|
let internalVMContext = dom.getInternalVMContext(); |
||||||
|
// 执行 js
|
||||||
|
script.runInContext(internalVMContext); |
||||||
|
|
||||||
|
for (let i = 0; i < 10; i++) { |
||||||
|
await sleep(100) |
||||||
|
let hasCookie = storeCookie.has(uuid) |
||||||
|
if (hasCookie) { |
||||||
|
let newVar = storeCookie.get(uuid); |
||||||
|
storeCookie.delete(uuid) |
||||||
|
return newVar; |
||||||
|
} |
||||||
|
} |
||||||
|
throw new Error('执行超时') |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
module.exports = router |
@ -0,0 +1,109 @@ |
|||||||
|
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0" |
||||||
|
|
||||||
|
const {jsdomFromText, browser, jsdomFromUrl} = require("sdenv"); |
||||||
|
const {Script} = require("vm"); |
||||||
|
let fs = require('fs'); |
||||||
|
const cheerio = require('cheerio'); |
||||||
|
|
||||||
|
var baseUrl = "https://etax.hubei.chinatax.gov.cn:8443/" |
||||||
|
let url = `https://etax.hubei.chinatax.gov.cn:8443/`; |
||||||
|
|
||||||
|
function loadPages(urlBase64, jsBase64, htmlBase64, cookieBase64, userAgentBase64, ts) { |
||||||
|
const htmlText = htmlBase64; |
||||||
|
const jsText = jsBase64; |
||||||
|
|
||||||
|
const [jsDom, cookieJar] = jsdomFromText({ |
||||||
|
proxy: 'http://127.0.0.1:8080', |
||||||
|
url: url, |
||||||
|
referrer: url, |
||||||
|
contentType: "text/html", |
||||||
|
runScripts: "outside-only", // runScripts: 'dangerously'/'outside-only'
|
||||||
|
}) |
||||||
|
|
||||||
|
const dom = jsDom(htmlText); |
||||||
|
// console.log('file',dom.serialize())
|
||||||
|
|
||||||
|
window = dom.window |
||||||
|
// 加载 window.$_ts
|
||||||
|
let $ = cheerio.load(htmlText); |
||||||
|
let nextAll = $('script[r=m]'); |
||||||
|
|
||||||
|
let trendJs = $('script').first().html(); |
||||||
|
let js = trendJs + ";\n" + jsText |
||||||
|
// nextAll.each((index, element) => {
|
||||||
|
// let attr = $(element).html();
|
||||||
|
// if (attr) {
|
||||||
|
// js += attr
|
||||||
|
// } else {
|
||||||
|
// js += jsText
|
||||||
|
// }
|
||||||
|
// js += ";\n"
|
||||||
|
// })
|
||||||
|
// fs.writeFileSync('/home/liu/桌面/test111.js', js)
|
||||||
|
cookieJar.setCookieSync(cookieBase64, baseUrl); |
||||||
|
|
||||||
|
|
||||||
|
window.onbeforeunload = async (url) => { |
||||||
|
|
||||||
|
const cookies = cookieJar.getCookieStringSync(baseUrl); |
||||||
|
console.debug(`${url} 生成cookie:`, cookies); |
||||||
|
|
||||||
|
|
||||||
|
let fff = await fetch("https://etax.hubei.chinatax.gov.cn:8443/", { |
||||||
|
"headers": { |
||||||
|
"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", |
||||||
|
"accept-language": "zh-CN,zh;q=0.9", |
||||||
|
"cache-control": "no-cache", |
||||||
|
"pragma": "no-cache", |
||||||
|
"priority": "u=0, i", |
||||||
|
"sec-ch-ua": "\"Not/A)Brand\";v=\"8\", \"Chromium\";v=\"126\", \"Google Chrome\";v=\"126\"", |
||||||
|
"sec-ch-ua-mobile": "?0", |
||||||
|
"sec-ch-ua-platform": "\"Linux\"", |
||||||
|
"sec-fetch-dest": "document", |
||||||
|
"sec-fetch-mode": "navigate", |
||||||
|
"sec-fetch-site": "same-origin", |
||||||
|
"upgrade-insecure-requests": "1", |
||||||
|
// "cookie": "WKFVysqPUWooO=60hpQvjw7ZsGEBT1OJrgQPSqW9IvwKkC7F.ZR1jluU6cX7e7UOWm8eQZB1ZbWnMcg4cEVJcZN9nQtAeSdqDVE_Ea; WKFVysqPUWooP=0MfuEaK_F4sjBozT84fODUBGaz69PKunV0EVKwEm2T2refsm9_SKCDlyB602dwDssmS1E6xPpFjWeYxm.Y1lYG7UhsNpOpuG0XkKH8jySNMcAl8rPBIwAjJ2yjATYrPP8LR__viJamtP2tQ44SVRz1cVIWUN9wPXb8hdLb6_w5WDNz40yGJ8HHlErfshCe_vxWy6QpuT9BDw2Bgzd0d.8HIK9BmcckmPtqXCQE4HvPsPM5bw4.QU.35QlsFl1byPT_A9VIUiohyjHvhfslECM7MXc9JVLUPrpD62nk.qHpI0",
|
||||||
|
"cookie": cookies, |
||||||
|
"Referer": "https://etax.hubei.chinatax.gov.cn:8443/", |
||||||
|
"Referrer-Policy": "strict-origin-when-cross-origin" |
||||||
|
}, |
||||||
|
"body": null, |
||||||
|
"method": "GET" |
||||||
|
}); |
||||||
|
|
||||||
|
console.log(fff.status, fff.statusText) |
||||||
|
|
||||||
|
|
||||||
|
window.close(); |
||||||
|
} |
||||||
|
|
||||||
|
browser(dom.window, 'chrome'); |
||||||
|
|
||||||
|
let script = new Script(js); |
||||||
|
let internalVMContext = dom.getInternalVMContext(); |
||||||
|
// 执行 js
|
||||||
|
script.runInContext(internalVMContext); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
async function test() { |
||||||
|
let response = await fetch(url, {"method": "GET"}); |
||||||
|
// 返回页面内容
|
||||||
|
let htmlStr = await response.text(); |
||||||
|
// console.log(htmlStr)
|
||||||
|
|
||||||
|
|
||||||
|
// 页面返回cookie
|
||||||
|
let cookies = response.headers.get("Set-Cookie"); |
||||||
|
// let htmlCookie = cookies.split('; ')[0];
|
||||||
|
// console.log(htmlCookie)
|
||||||
|
|
||||||
|
let staticJs = fs.readFileSync('/home/liu/桌面/hubei.eh5axISchOau.ed63b8f.js'); |
||||||
|
|
||||||
|
loadPages(url, staticJs.toString('utf8'), htmlStr, cookies, "") |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
test(); |
@ -0,0 +1,52 @@ |
|||||||
|
const {jsdomFromText, jsdomFromUrl, browser} = require('sdenv'); |
||||||
|
const path = require("path"); |
||||||
|
const fs = require("fs"); |
||||||
|
const {Script} = require("vm"); |
||||||
|
|
||||||
|
const baseUrl = "https://tpass.hebei.chinatax.gov.cn:8443/" |
||||||
|
|
||||||
|
const files = { |
||||||
|
html: path.resolve('../public/hubei/index.html'), |
||||||
|
js: path.resolve('../public/hubei/5PXGXoOF7eGJ.ed63b8f.js'), |
||||||
|
ts: path.resolve('../public/hubei/ts.json'), |
||||||
|
} |
||||||
|
|
||||||
|
function getFile(name) { |
||||||
|
const filepath = files[name]; |
||||||
|
if (!filepath) throw new Error(`getFile: ${name}错误`); |
||||||
|
if (!fs.existsSync(filepath)) throw new Error(`文件${filepath}不存在,请使用rs-reverse工具先获取文件`); |
||||||
|
return fs.readFileSync(filepath); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
function loadPages() { |
||||||
|
const htmlText = getFile('html'); |
||||||
|
const jsText = getFile('js'); |
||||||
|
let file = getFile('ts'); |
||||||
|
|
||||||
|
let url = `${baseUrl}sys-api/v1.0/auth/oauth2/getPublicKey`; |
||||||
|
const [jsDom, cookieJar] = jsdomFromText({ |
||||||
|
url: url, |
||||||
|
referrer: url, |
||||||
|
contentType: "text/html", |
||||||
|
runScripts: "outside-only", |
||||||
|
}) |
||||||
|
const dom = jsDom(htmlText); |
||||||
|
window = dom.window |
||||||
|
window.$_ts = JSON.parse(file.toString()); |
||||||
|
window.onbeforeunload = async (url) => { |
||||||
|
const cookies = cookieJar.getCookieStringSync(baseUrl); |
||||||
|
console.debug(`${url} 生成cookie:`, cookies); |
||||||
|
window.close(); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
new Script(jsText.toString()).runInContext(dom.getInternalVMContext()); |
||||||
|
|
||||||
|
browser(dom.window, 'chrome'); |
||||||
|
console.log(111) |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
let promise = loadPages() |
||||||
|
module.exports = promise |
@ -0,0 +1,151 @@ |
|||||||
|
const express = require('express') |
||||||
|
const path = require('path') |
||||||
|
const fs = require('fs') |
||||||
|
const app = express() |
||||||
|
const PORT = 3000 |
||||||
|
|
||||||
|
// process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"
|
||||||
|
const {jsdomFromText, jsdomFromUrl, browser} = require('sdenv'); |
||||||
|
const {Script} = require("vm"); |
||||||
|
|
||||||
|
|
||||||
|
const baseUrl = "https://etax.hebei.chinatax.gov.cn:8443/" |
||||||
|
|
||||||
|
const store = new Map(); |
||||||
|
|
||||||
|
const files = { |
||||||
|
html: path.resolve('../public/hubei/index.html'), |
||||||
|
js: path.resolve('../public/hubei/5PXGXoOF7eGJ.ed63b8f.js'), |
||||||
|
ts: path.resolve('../public/hubei/ts.json'), |
||||||
|
} |
||||||
|
|
||||||
|
function getFile(name) { |
||||||
|
const filepath = files[name]; |
||||||
|
if (!filepath) throw new Error(`getFile: ${name}错误`); |
||||||
|
if (!fs.existsSync(filepath)) throw new Error(`文件${filepath}不存在,请使用rs-reverse工具先获取文件`); |
||||||
|
return fs.readFileSync(filepath); |
||||||
|
} |
||||||
|
|
||||||
|
async function loadPages(key) { |
||||||
|
const htmlText = getFile('html'); |
||||||
|
const jsText = getFile('js'); |
||||||
|
let tsText = getFile('ts'); |
||||||
|
let get = `${baseUrl}`; |
||||||
|
const [jsDom, cookieJar] = jsdomFromText({ |
||||||
|
url: get, |
||||||
|
referrer: get, |
||||||
|
contentType: "text/html", |
||||||
|
runScripts: "dangerously",//dangerously启用在页面内执行js,outside-only在外部执行js:window.eval()
|
||||||
|
}) |
||||||
|
const dom = jsDom(htmlText); |
||||||
|
window = dom.window |
||||||
|
window.$_ts = JSON.parse(tsText.toString()); |
||||||
|
window.onbeforeunload = async (url) => { |
||||||
|
const cookies = cookieJar.getCookieStringSync(baseUrl); |
||||||
|
console.debug('生成cookie:', cookies); |
||||||
|
store.set(key, cookies) |
||||||
|
// window.close();
|
||||||
|
} |
||||||
|
browser(window, 'chrome'); |
||||||
|
|
||||||
|
new Script(jsText.toString()).runInContext(dom.getInternalVMContext()); |
||||||
|
|
||||||
|
return cookieJar; |
||||||
|
} |
||||||
|
|
||||||
|
let sleep = ms => new Promise(resolve => setTimeout(resolve, ms)); |
||||||
|
|
||||||
|
|
||||||
|
function action(key, url) { |
||||||
|
return new Promise(async (resolve, reject) => { |
||||||
|
let cookieJar = await loadPages(key, url); |
||||||
|
// for (let i = 0; i < 100; i++) {
|
||||||
|
await sleep(1000) |
||||||
|
let cookieStringSync = cookieJar.getCookieStringSync(baseUrl); |
||||||
|
let val = store.get(key); |
||||||
|
// console.log(val)
|
||||||
|
console.log(cookieStringSync) |
||||||
|
// 尝试访问
|
||||||
|
let response = await fetch(baseUrl, { |
||||||
|
"headers": { |
||||||
|
"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", |
||||||
|
"accept-language": "zh-CN,zh;q=0.9", |
||||||
|
"cache-control": "no-cache", |
||||||
|
"pragma": "no-cache", |
||||||
|
"priority": "u=0, i", |
||||||
|
"sec-ch-ua": "\"Not/A)Brand\";v=\"8\", \"Chromium\";v=\"126\", \"Google Chrome\";v=\"126\"", |
||||||
|
"sec-ch-ua-mobile": "?0", |
||||||
|
"sec-ch-ua-platform": "\"Linux\"", |
||||||
|
"sec-fetch-dest": "document", |
||||||
|
"sec-fetch-mode": "navigate", |
||||||
|
"sec-fetch-site": "none", |
||||||
|
"sec-fetch-user": "?1", |
||||||
|
"upgrade-insecure-requests": "1" |
||||||
|
}, |
||||||
|
"referrerPolicy": "strict-origin-when-cross-origin", |
||||||
|
"body": null, |
||||||
|
"method": "GET" |
||||||
|
}); |
||||||
|
console.log('11111111111', response.headers.get('set-cookie')); |
||||||
|
|
||||||
|
if (cookieStringSync !== undefined) { |
||||||
|
return resolve(cookieStringSync) |
||||||
|
} |
||||||
|
// }
|
||||||
|
reject('未获取到cookie') |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
action("111111", baseUrl) |
||||||
|
|
||||||
|
app.get('/getCookie', async (req, res) => { |
||||||
|
let traceId = req.query['traceId']; |
||||||
|
if (traceId === undefined) { |
||||||
|
return res.send('error') |
||||||
|
} |
||||||
|
let url = req.query['url']; |
||||||
|
try { |
||||||
|
let ac = await action(traceId, url); |
||||||
|
return res.send(ac) |
||||||
|
} catch (e) { |
||||||
|
return res.send(e) |
||||||
|
} |
||||||
|
}) |
||||||
|
|
||||||
|
//
|
||||||
|
// fetch("https://tpass.hebei.chinatax.gov.cn:8443/sys-api/v1.0/auth/oauth2/getPublicKey", {
|
||||||
|
// "headers": {
|
||||||
|
// "accept": "application/json, text/plain, */*",
|
||||||
|
// "accept-language": "zh-CN,zh;q=0.9",
|
||||||
|
// "authorization": "",
|
||||||
|
// "cache-control": "no-cache",
|
||||||
|
// "content-type": "application/json",
|
||||||
|
// "deviceidentyno": "wrhX86TArZj82EUurHJWVBktiBVKERpy",
|
||||||
|
// "huid": "",
|
||||||
|
// "pragma": "no-cache",
|
||||||
|
// "priority": "u=1, i",
|
||||||
|
// "sec-ch-ua": "\"Not/A)Brand\";v=\"8\", \"Chromium\";v=\"126\", \"Google Chrome\";v=\"126\"",
|
||||||
|
// "sec-ch-ua-mobile": "?0",
|
||||||
|
// "sec-ch-ua-platform": "\"Linux\"",
|
||||||
|
// "sec-fetch-dest": "empty",
|
||||||
|
// "sec-fetch-mode": "cors",
|
||||||
|
// "sec-fetch-site": "same-origin",
|
||||||
|
// "x-app-clientid": "",
|
||||||
|
// "x-lang-id": "null",
|
||||||
|
// "x-nature-ip": "",
|
||||||
|
// "x-sm4-info": "0",
|
||||||
|
// "x-temp-info": "fffe092bceb04d32915d41c2634ed9ff",
|
||||||
|
// "x-ticket-id": "null"
|
||||||
|
// },
|
||||||
|
// "referrer": "https://tpass.hebei.chinatax.gov.cn:8443/",
|
||||||
|
// "referrerPolicy": "strict-origin-when-cross-origin",
|
||||||
|
// "body": "{\"zipCode\":\"0\",\"encryptCode\":\"0\",\"datagram\":\"{}\",\"timestamp\":\"20240828150426\",\"access_token\":\"\",\"signtype\":\"HMacSHA256\",\"signature\":\"67848659b891af24ea9c2706e6fccbf03c2448666b719c00a49534dc536500fc\"}",
|
||||||
|
// "method": "POST",
|
||||||
|
// "mode": "cors",
|
||||||
|
// "credentials": "include"
|
||||||
|
// });
|
||||||
|
|
||||||
|
|
||||||
|
// app.listen(PORT, () => {
|
||||||
|
// console.log(`app is running on PORT ${PORT}`)
|
||||||
|
// })
|
@ -0,0 +1,52 @@ |
|||||||
|
const {jsdomFromText, jsdomFromUrl, browser} = require('sdenv'); |
||||||
|
const path = require("path"); |
||||||
|
const fs = require("fs"); |
||||||
|
const {Script} = require("vm"); |
||||||
|
|
||||||
|
const baseUrl = "https://wcjs.sbj.cnipa.gov.cn" |
||||||
|
|
||||||
|
const files = { |
||||||
|
html: path.resolve('../public/shangbiao/static/makecode_input_html.html'), |
||||||
|
js: path.resolve('../public/shangbiao/static/makecode_input_js.js'), |
||||||
|
ts: path.resolve('../public/shangbiao/static/makecode_input_ts.json'), |
||||||
|
} |
||||||
|
|
||||||
|
function getFile(name) { |
||||||
|
const filepath = files[name]; |
||||||
|
if (!filepath) throw new Error(`getFile: ${name}错误`); |
||||||
|
if (!fs.existsSync(filepath)) throw new Error(`文件${filepath}不存在,请使用rs-reverse工具先获取文件`); |
||||||
|
return fs.readFileSync(filepath); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
function loadPages() { |
||||||
|
const htmlText = getFile('html'); |
||||||
|
const jsText = getFile('js'); |
||||||
|
let file = getFile('ts'); |
||||||
|
|
||||||
|
let url = `${baseUrl}/sgtmi`; |
||||||
|
const [jsDom, cookieJar] = jsdomFromText({ |
||||||
|
url: url, |
||||||
|
referrer: url, |
||||||
|
contentType: "text/html", |
||||||
|
runScripts: "outside-only", |
||||||
|
}) |
||||||
|
const dom = jsDom(htmlText); |
||||||
|
window = dom.window |
||||||
|
window.$_ts = JSON.parse(file.toString()); |
||||||
|
window.onbeforeunload = async (url) => { |
||||||
|
const cookies = cookieJar.getCookieStringSync(baseUrl); |
||||||
|
console.debug(`${url} 生成cookie:`, cookies); |
||||||
|
window.close(); |
||||||
|
} |
||||||
|
|
||||||
|
new Script(jsText.toString()).runInContext(dom.getInternalVMContext()); |
||||||
|
|
||||||
|
browser(dom.window, 'chrome'); |
||||||
|
return cookieJar.getCookieStringSync(baseUrl) |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
let promise = loadPages() |
||||||
|
console.log(promise); |
||||||
|
module.exports = promise |
@ -0,0 +1,121 @@ |
|||||||
|
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0" |
||||||
|
|
||||||
|
const {jsdomFromText, browser, jsdomFromUrl} = require("sdenv"); |
||||||
|
const {Script} = require("vm"); |
||||||
|
let fs = require('fs'); |
||||||
|
const express = require("express"); |
||||||
|
const cheerio = require('cheerio'); |
||||||
|
|
||||||
|
|
||||||
|
const app = express(); |
||||||
|
|
||||||
|
var baseUrl = "https://app.yunnan.chinatax.gov.cn" |
||||||
|
let url = `https://app.yunnan.chinatax.gov.cn/xxmh/html/dfts/index_frame.html`; |
||||||
|
|
||||||
|
async function extracted(cookieJar) { |
||||||
|
const [jsdomer] = await jsdomFromUrl({ |
||||||
|
proxy: 'http://127.0.0.1:8080', |
||||||
|
strictSSL: false, |
||||||
|
userAgent: 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', |
||||||
|
}, cookieJar); |
||||||
|
const dom = await jsdomer(url); |
||||||
|
|
||||||
|
console.log(dom.serialize()) |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
function loadPages(urlBase64, jsBase64, htmlBase64, cookieBase64, userAgentBase64, ts) { |
||||||
|
const htmlText = htmlBase64; |
||||||
|
const jsText = jsBase64; |
||||||
|
|
||||||
|
const [jsDom, cookieJar] = jsdomFromText({ |
||||||
|
proxy: 'http://127.0.0.1:8080', |
||||||
|
url: url, |
||||||
|
referrer: url, |
||||||
|
contentType: "text/html", |
||||||
|
runScripts: "outside-only", // runScripts: 'dangerously'/'outside-only'
|
||||||
|
}) |
||||||
|
|
||||||
|
const dom = jsDom(htmlText); |
||||||
|
// console.log('file',dom.serialize())
|
||||||
|
|
||||||
|
window = dom.window |
||||||
|
// 加载 window.$_ts
|
||||||
|
let $ = cheerio.load(htmlText); |
||||||
|
let nextAll = $('script[r=m]'); |
||||||
|
|
||||||
|
let trendJs = $('script').first().html(); |
||||||
|
let js = trendJs + ";\n" + jsText |
||||||
|
// nextAll.each((index, element) => {
|
||||||
|
// let attr = $(element).html();
|
||||||
|
// if (attr) {
|
||||||
|
// js += attr
|
||||||
|
// } else {
|
||||||
|
// js += jsText
|
||||||
|
// }
|
||||||
|
// js += ";\n"
|
||||||
|
// })
|
||||||
|
// fs.writeFileSync('/home/liu/桌面/test111.js', js)
|
||||||
|
cookieJar.setCookieSync(cookieBase64, baseUrl); |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
window.onbeforeunload = async (url) => { |
||||||
|
|
||||||
|
const cookies = cookieJar.getCookieStringSync(baseUrl); |
||||||
|
console.debug(`${url} 生成cookie:`, cookies); |
||||||
|
|
||||||
|
|
||||||
|
let fff = await fetch("https://app.yunnan.chinatax.gov.cn/xxmh/html/dfts/index_frame.html", { |
||||||
|
"headers": { |
||||||
|
"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", |
||||||
|
"accept-language": "zh-CN,zh;q=0.9", |
||||||
|
"cache-control": "no-cache", |
||||||
|
"pragma": "no-cache", |
||||||
|
"sec-ch-ua": "\"Not/A)Brand\";v=\"8\", \"Chromium\";v=\"126\", \"Google Chrome\";v=\"126\"", |
||||||
|
"sec-ch-ua-mobile": "?0", |
||||||
|
"sec-ch-ua-platform": "\"Linux\"", |
||||||
|
"sec-fetch-dest": "document", |
||||||
|
"sec-fetch-mode": "navigate", |
||||||
|
"sec-fetch-site": "same-origin", |
||||||
|
"upgrade-insecure-requests": "1", |
||||||
|
"cookie": cookies, |
||||||
|
"Referer": "https://app.yunnan.chinatax.gov.cn/xxmh/html/dfts/index_frame.html", |
||||||
|
}, "body": null, "method": "GET" |
||||||
|
}); |
||||||
|
|
||||||
|
console.log(fff.status, fff.statusText) |
||||||
|
|
||||||
|
|
||||||
|
window.close(); |
||||||
|
} |
||||||
|
|
||||||
|
browser(dom.window, 'chrome'); |
||||||
|
|
||||||
|
let script = new Script(js); |
||||||
|
let internalVMContext = dom.getInternalVMContext(); |
||||||
|
// 执行 js
|
||||||
|
script.runInContext(internalVMContext); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
async function test() { |
||||||
|
let response = await fetch(url, {"method": "GET"}); |
||||||
|
// 返回页面内容
|
||||||
|
let htmlStr = await response.text(); |
||||||
|
// console.log(htmlStr)
|
||||||
|
|
||||||
|
|
||||||
|
// 页面返回cookie
|
||||||
|
let cookies = response.headers.get("Set-Cookie"); |
||||||
|
// let htmlCookie = cookies.split('; ')[0];
|
||||||
|
// console.log(htmlCookie)
|
||||||
|
|
||||||
|
let staticJs = fs.readFileSync('/home/liu/桌面/MO5zzCMcub4d.b4c45da.js'); |
||||||
|
|
||||||
|
loadPages(url, staticJs.toString('utf8'), htmlStr, cookies, "") |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
test(); |
@ -0,0 +1,50 @@ |
|||||||
|
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0" |
||||||
|
|
||||||
|
// const cookie = require('cookie');
|
||||||
|
const {jsdomFromText, jsdomFromUrl, browser} = require('sdenv'); |
||||||
|
// const path = require("path");
|
||||||
|
// const fs = require("fs");
|
||||||
|
// const {Script} = require("vm");
|
||||||
|
|
||||||
|
|
||||||
|
let sleep = ms => new Promise(resolve => setTimeout(resolve, ms)); |
||||||
|
|
||||||
|
|
||||||
|
const baseUrl = "https://app.yunnan.chinatax.gov.cn" |
||||||
|
const second = "https://app.yunnan.chinatax.gov.cn/xxmh/html/dfts/index_frame.html" |
||||||
|
|
||||||
|
|
||||||
|
async function extracted(cookieJar) { |
||||||
|
const [jsdomer] = await jsdomFromUrl({ |
||||||
|
proxy: 'http://127.0.0.1:8080', |
||||||
|
userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36', |
||||||
|
}, cookieJar); |
||||||
|
const dom = await jsdomer(second); |
||||||
|
|
||||||
|
console.log(dom.window.document.textContent) |
||||||
|
} |
||||||
|
|
||||||
|
async function loadPagesFirst() { |
||||||
|
const [jsdomer, cookieJar] = await jsdomFromUrl({ |
||||||
|
proxy: 'http://127.0.0.1:8080', |
||||||
|
userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36', |
||||||
|
}); |
||||||
|
const dom = await jsdomer(second); |
||||||
|
window = dom.window |
||||||
|
window.document.style = dom.window.style |
||||||
|
window.onbeforeunload = async (url) => { |
||||||
|
const cookies = cookieJar.getCookieStringSync(baseUrl); |
||||||
|
console.debug('生成cookie:', cookies); |
||||||
|
// await loadPagesSecond(cookieJar)
|
||||||
|
|
||||||
|
await extracted(cookieJar); |
||||||
|
|
||||||
|
window.close(); |
||||||
|
} |
||||||
|
// await sleep(500)
|
||||||
|
// await extracted(cookieJar);
|
||||||
|
browser(window, 'chrome'); |
||||||
|
} |
||||||
|
|
||||||
|
loadPagesFirst().then(r => { |
||||||
|
}) |
@ -0,0 +1,16 @@ |
|||||||
|
// const paths = require('./paths');
|
||||||
|
// const pkg = require(paths.package);
|
||||||
|
// const log4js = require('log4js');
|
||||||
|
//
|
||||||
|
// log4js.configure({
|
||||||
|
// appenders: {
|
||||||
|
// console: { type: 'console' }
|
||||||
|
// },
|
||||||
|
// categories: {
|
||||||
|
// default: { appenders: ['console'], level: 'info' }
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
// const logger = log4js.getLogger(pkg.name);
|
||||||
|
// logger.level = pkg.logLevel || 'debug';
|
||||||
|
//
|
||||||
|
// module.exports = logger;
|
@ -0,0 +1,24 @@ |
|||||||
|
// const path = require('path');
|
||||||
|
// const fs = require('fs');
|
||||||
|
//
|
||||||
|
// const appDirectory = (() => {
|
||||||
|
// // 返回项目根目录
|
||||||
|
// const plist = path.resolve(__dirname).split(path.sep);
|
||||||
|
// while (!fs.existsSync(path.resolve(plist.join(path.sep), 'package.json'))) {
|
||||||
|
// plist.pop();
|
||||||
|
// if (plist.length === 0) return false;
|
||||||
|
// }
|
||||||
|
// return plist.join(path.sep);
|
||||||
|
// })();
|
||||||
|
// const resolveApp = (...relativePath) => path.resolve(appDirectory, ...relativePath);
|
||||||
|
//
|
||||||
|
// module.exports = {
|
||||||
|
// basePath: resolveApp('.'),
|
||||||
|
// modulePath: resolveApp('node_modules'),
|
||||||
|
// binPath: resolveApp('node_modules', '.bin/'),
|
||||||
|
// package: resolveApp('package.json'),
|
||||||
|
// resolve: resolveApp,
|
||||||
|
// handlerPath: resolveApp('handler'),
|
||||||
|
// configPath: resolveApp('config'),
|
||||||
|
// configResolve: (...p) => resolveApp('config', ...p),
|
||||||
|
// };
|
Loading…
Reference in new issue