import subprocess
_bak_Popen = subprocess.Popen
def _Popen (*a, **kw):
kw[ return _bak_Popen (*a, **kw)
subprocess.Popen = _Popen
import execjs
import requests
import sys
from lxml import etree
from urllib.parse import urljoin
session = requests.Session ()
with open ( env_code = f.read ()
class Technology:
def __init__ (self):
# 定义请求头
self.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,en-US;q=0.8,en;q=0.7",
"cache-control": "no-cache",
"pragma": "no-cache",
"priority": "u=0, i",
"referer": "https://d.gd.189.cn/crmweb/sysmgr/login.action",
"upgrade-insecure-requests": "1",
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36 Edg/135.0.0.0"
}
# 定义请求地址
self.url = "https://d.gd.189.cn/crmweb/sysmgr/login.action"
self.cookies = dict ()
def get_cookie (self):
# 第一次请求
response = session.get (self.url, headers=self.headers, cookies=self.cookies)
self.cookies[ html = etree.HTML (response.text)
# 获取 content 参数
content = html.xpath ( # 获取 自执行方法 文件代码
eval_url = urljoin (self.url, html.xpath ( eval_code = session.get (eval_url, headers=self.headers).content.decode ( # 获取ts代码
ts_code = html.xpath ( # 编译JS代码
self.js = execjs.compile ( with open ( f.write ( # 生成cookie参数
self.cookies[ def main (self,method,url):
self.get_cookie ()
return {
}
if __name__ == if len (sys.argv) > 2:
method = str (sys.argv[1])
else:method = "GET"
if len (sys.argv) > 2:
url = str (sys.argv[2])
else:url = "https://d.gd.189.cn/crmweb/sysmgr/login.action"
spider = Technology ()
res = spider.main (method,url)
print (res)
变量名 | 类 型 | 静态 | 数组 | 备 注 |
文件句柄 | 整数型 | | |
文件内容 | 文本型 | | |
文件大小 | 整数型 | | |
文件句柄 =
打开文件 (文件名, , ,
)如果 (文件句柄 = 0
)返回 (""
)结束
文件大小 =
取文件长度 (文件句柄
)文件内容 =
读入文件 (文件句柄, 文件大小
)关闭文件 (文件句柄
)返回 (文件内容
).子程序尾
.类 技术处理
|
(未定义数据类型名) | | |
|
头信息 | 文本型 | | |
URL | 文本型 | | |
Cookies | 文本型 | | |
JS代码 | 文本型 | | |
环境代码 | 文本型 | | |
.子程序 初始化
// 设置请求头
头信息 = "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\r\n" +
"accept-language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7\r\n" +
"cache-control: no-cache\r\n" +
"pragma: no-cache\r\n" +
"priority: u=0, i\r\n" +
"referer: https://d.gd.189.cn/crmweb/sysmgr/login.action\r\n" +
"upgrade-insecure-requests: 1\r\n" +
"user-agent: Mozilla/5.
0 (Windows NT 10.0; Win64; x64
) AppleWebKit/537.
36 (KHTML, like Gecko
) Chrome/135.0.0.0 Safari/537.36 Edg/135.0.0.0"
// 设置请求URL
URL = "https://d.gd.189.cn/crmweb/sysmgr/login.action"
// 读取JavaScript环境代码
环境代码 =
读入JavaScript文件 ("rs_env.js"
).子程序尾
.子程序 获取Cookie
.局部变量 响应内容, 文本型
.局部变量 内容参数, 文本型
.局部变量 evalURL, 文本型
.局部变量 eval代码, 文本型
.局部变量 ts代码, 文本型
.局部变量 网页对象, 整数型
.局部变量 节点列表, 整数型
.局部变量 节点, 整数型
.局部变量 i, 整数型
.局部变量 临时Cookie, 文本型
// 第一次请求
响应内容 =
HTTP读文件 (URL, 头信息, Cookies
)// 提取Cookie
临时Cookie =
取HTTPCookie (URL
)如果 (寻找文本 (临时Cookie, "42ZfFFpfC71iS=", ,
) > 0
)Cookies = "42ZfFFpfC71iS=" +
子文本替换 (临时Cookie,
寻找文本 (临时Cookie, "42ZfFFpfC71iS=", ,
) + 13,
寻找文本 (临时Cookie, ";",
寻找文本 (临时Cookie, "42ZfFFpfC71iS=", ,
)) -
寻找文本 (临时Cookie, "42ZfFFpfC71iS=", ,
) - 13, ""
)结束
// 解析HTML
网页对象 =
创建HTML对象 (响应内容
)// 获取content参数
节点列表 =
取HTML对象节点列表 (网页对象, "meta
[id
]"
)如果 (取数组成员数 (节点列表
) > 0
)节点 = 节点列表
[1
]内容参数 =
取HTML对象节点属性 (节点, "content"
)结束
// 获取自执行方法文件代码
节点列表 =
取HTML对象节点列表 (网页对象, "script
[charset
]"
)如果 (取数组成员数 (节点列表
) > 0
)节点 = 节点列表
[1
]evalURL =
取HTML对象节点属性 (节点, "src"
)// 补全URL
如果 (寻找文本 (evalURL, "http", ,
) = 0
)evalURL = URL + evalURL
结束
eval代码 =
HTTP读文件 (evalURL, 头信息, Cookies
)结束
// 获取ts代码
节点列表 =
取HTML对象节点列表 (网页对象, "script:
not ([charset
])"
)如果 (取数组成员数 (节点列表
) > 0
)节点 = 节点列表
[1
]ts代码 =
取HTML对象节点内容 (节点
)结束
// 释放HTML对象
释放HTML对象 (网页对象
)// 组合JS代码
JS代码 = "var content=\"" + 内容参数 + "\";\r\n" + 环境代码 + "\r\n" + ts代码 + "\r\n" + eval代码
// 保存JS代码到文件
写到文件 ("execjs.js", JS代码
)// 执行JS获取Cookie
临时Cookie =
执行JS ("
get_cookie ()", JS代码
)如果 (寻找文本 (临时Cookie, "42ZfFFpfC71iT=", ,
) > 0
)Cookies = Cookies + "; 42ZfFFpfC71iT=" +
子文本替换 (临时Cookie,
寻找文本 (临时Cookie, "42ZfFFpfC71iT=", ,
) + 13,
寻找文本 (临时Cookie, ";",
寻找文本 (临时Cookie, "42ZfFFpfC71iT=", ,
)) -
寻找文本 (临时Cookie, "42ZfFFpfC71iT=", ,
) - 13, ""
)结束
.子程序尾
.子程序 主处理, 文本型
|
(暂未填写DLL命令名) | | |
|
(未填写库文件名) |
|
(未填写命令名) |
|
方法 | 文本型 | | |
请求URL | 文本型 | | |
.局部变量 返回结果, 文本型
// 获取Cookie
获取Cookie ()// 执行JS获取处理后的URL
请求URL =
执行JS ("
get_url (\"" + 方法 + "\", \"" + 请求URL + "\"
)", JS代码
)// 构建返回结果
返回结果 = "
{""cookies"":""" + Cookies + """,""url"":""" + 请求URL + """
}"
返回 (返回结果
).子程序尾
.类尾
// 创建JScript引擎
引擎 =
创建JScript引擎 ()// 添加环境代码
执行JScript代码 (引擎, 环境代码
)// 执行JS代码并获取结果
结果 =
执行JScript代码 (引擎, JS代码
)// 释放引擎
释放JScript引擎 (引擎
)返回 (结果
).子程序尾
|
_启动子程序 | 整数型 | |
|
命令行参数 | 整数型 | | | |
命令行参数值 | 整数型 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 |
方法 | 文本型 | | |
请求URL | 文本型 | | |
技术处理对象 | 技术处理 | | |
结果 | 文本型 | | |
// 获取命令行参数
如果 (命令行参数 > 1
)方法 =
取命令行参数 (1
)否则
方法 = "GET"
结束
如果 (命令行参数 > 2
)请求URL =
取命令行参数 (2
)否则
请求URL = "https://d.gd.189.cn/crmweb/sysmgr/login.action"
结束
// 创建技术处理对象并执行
技术处理对象 =
创建技术处理 ()结果 = 技术处理对象.
主处理 (方法, 请求URL
)// 输出结果
调试输出 (结果
)返回 (0
).子程序尾