@iflyrpa/actions 4.0.0-beta.6 → 5.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundle.js +279 -82
- package/dist/bundle.js.map +1 -1
- package/dist/index.js +278 -81
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +278 -81
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/dist/bundle.js
CHANGED
|
@@ -8734,9 +8734,9 @@ var __webpack_exports__ = {};
|
|
|
8734
8734
|
origin: ()=>utils_origin
|
|
8735
8735
|
});
|
|
8736
8736
|
var package_namespaceObject = {
|
|
8737
|
-
i8: "0.1.
|
|
8737
|
+
i8: "0.1.2"
|
|
8738
8738
|
};
|
|
8739
|
-
var package_namespaceObject_0 = JSON.parse('{"i8":"4.0.
|
|
8739
|
+
var package_namespaceObject_0 = JSON.parse('{"i8":"4.0.1-beta.0"}');
|
|
8740
8740
|
const external_node_fs_namespaceObject = require("node:fs");
|
|
8741
8741
|
var external_node_fs_default = /*#__PURE__*/ __webpack_require__.n(external_node_fs_namespaceObject);
|
|
8742
8742
|
const external_node_http_namespaceObject = require("node:http");
|
|
@@ -23368,7 +23368,8 @@ var __webpack_exports__ = {};
|
|
|
23368
23368
|
url: error.config?.url,
|
|
23369
23369
|
isProxyRequest: !!(error.config && (error.config.httpAgent || error.config.httpsAgent)),
|
|
23370
23370
|
params: error.config?.params,
|
|
23371
|
-
data: error.config?.data
|
|
23371
|
+
data: error.config?.data,
|
|
23372
|
+
serverDate: error.response?.headers?.date
|
|
23372
23373
|
}
|
|
23373
23374
|
};
|
|
23374
23375
|
if (foundError) Object.assign(errorResponse, foundError);
|
|
@@ -23446,7 +23447,7 @@ var __webpack_exports__ = {};
|
|
|
23446
23447
|
try {
|
|
23447
23448
|
this.proxyInfo = agent ? `${agent.ip}:${agent.port}` : void 0;
|
|
23448
23449
|
const controller = new AbortController();
|
|
23449
|
-
const timeoutId = setTimeout(()=>controller.abort(), reqTimeout);
|
|
23450
|
+
const timeoutId = setTimeout(()=>controller.abort(), reqTimeout + 500);
|
|
23450
23451
|
const response = await this.apiClient({
|
|
23451
23452
|
...config,
|
|
23452
23453
|
timeout: reqTimeout,
|
|
@@ -23470,7 +23471,7 @@ var __webpack_exports__ = {};
|
|
|
23470
23471
|
599
|
|
23471
23472
|
].includes(handledError.code);
|
|
23472
23473
|
if (Rtimes < retries && isRetry) {
|
|
23473
|
-
this.logger?.info(`进入第${Rtimes + 1}
|
|
23474
|
+
this.logger?.info(`进入第${Rtimes + 1}次重试!错误码: ${handledError.code}`);
|
|
23474
23475
|
await new Promise((resolve)=>setTimeout(resolve, retryDelay));
|
|
23475
23476
|
return sessionRt(Rtimes + 1);
|
|
23476
23477
|
}
|
|
@@ -28655,23 +28656,26 @@ var __webpack_exports__ = {};
|
|
|
28655
28656
|
};
|
|
28656
28657
|
}
|
|
28657
28658
|
case types_ExecutionState.SUCCESS:
|
|
28658
|
-
|
|
28659
|
-
|
|
28660
|
-
|
|
28661
|
-
|
|
28662
|
-
|
|
28663
|
-
|
|
28664
|
-
|
|
28665
|
-
|
|
28666
|
-
|
|
28667
|
-
|
|
28668
|
-
|
|
28669
|
-
|
|
28670
|
-
|
|
28671
|
-
|
|
28672
|
-
|
|
28673
|
-
|
|
28674
|
-
|
|
28659
|
+
{
|
|
28660
|
+
const cookie = JSON.stringify(await task.steelBrowserContext?.cookies());
|
|
28661
|
+
await updateTaskState?.({
|
|
28662
|
+
state: types_TaskState.SUCCESS,
|
|
28663
|
+
result: {
|
|
28664
|
+
cookie,
|
|
28665
|
+
token,
|
|
28666
|
+
userInfo: userInfo
|
|
28667
|
+
}
|
|
28668
|
+
});
|
|
28669
|
+
return {
|
|
28670
|
+
code: 0,
|
|
28671
|
+
message: "成功",
|
|
28672
|
+
data: {
|
|
28673
|
+
cookie,
|
|
28674
|
+
token,
|
|
28675
|
+
userInfo
|
|
28676
|
+
}
|
|
28677
|
+
};
|
|
28678
|
+
}
|
|
28675
28679
|
default:
|
|
28676
28680
|
return {
|
|
28677
28681
|
code: 500,
|
|
@@ -29028,20 +29032,11 @@ var __webpack_exports__ = {};
|
|
|
29028
29032
|
};
|
|
29029
29033
|
const rpa_rpaAction = async (task, params)=>{
|
|
29030
29034
|
const tmpCachePath = task.getTmpPath();
|
|
29031
|
-
const
|
|
29032
|
-
path: "/",
|
|
29033
|
-
secure: true,
|
|
29034
|
-
domain: "baijiahao.baidu.com",
|
|
29035
|
-
url: "https://baijiahao.baidu.com",
|
|
29036
|
-
httpOnly: true
|
|
29037
|
-
};
|
|
29035
|
+
const validCookies = (params.cookies || []).filter((it)=>it.name && it.value && "undefined" !== it.value);
|
|
29038
29036
|
const page = await task.createPage({
|
|
29039
29037
|
show: task.debug,
|
|
29040
29038
|
url: params.url || "https://baijiahao.baidu.com/builder/rc/edit?type=news&is_from_cms=1",
|
|
29041
|
-
cookies:
|
|
29042
|
-
...it,
|
|
29043
|
-
...commonCookies
|
|
29044
|
-
})) || []
|
|
29039
|
+
cookies: validCookies
|
|
29045
29040
|
});
|
|
29046
29041
|
page.setDefaultTimeout(60000);
|
|
29047
29042
|
page.setDefaultNavigationTimeout(60000);
|
|
@@ -30574,6 +30569,8 @@ var __webpack_exports__ = {};
|
|
|
30574
30569
|
}
|
|
30575
30570
|
new Xhshow();
|
|
30576
30571
|
const sessionCheck_xsEncrypt = new Xhshow();
|
|
30572
|
+
let lastEnvLogTime = 0;
|
|
30573
|
+
const ENV_LOG_INTERVAL_MS = 5000;
|
|
30577
30574
|
const SessionCheckResultSchema = classic_schemas_object({
|
|
30578
30575
|
isValidSession: classic_schemas_boolean()
|
|
30579
30576
|
});
|
|
@@ -30638,6 +30635,23 @@ var __webpack_exports__ = {};
|
|
|
30638
30635
|
}, "微信账号有效性检测完成!");
|
|
30639
30636
|
};
|
|
30640
30637
|
const XhsSessionCheck = async (_task, params)=>{
|
|
30638
|
+
const now = Date.now();
|
|
30639
|
+
const shouldLogEnv = now - lastEnvLogTime >= ENV_LOG_INTERVAL_MS;
|
|
30640
|
+
if (shouldLogEnv) {
|
|
30641
|
+
lastEnvLogTime = now;
|
|
30642
|
+
_task.logger?.debug("[XhsSessionCheck] 环境信息", {
|
|
30643
|
+
processType: process.type,
|
|
30644
|
+
pid: process.pid,
|
|
30645
|
+
nodeVersion: process.version,
|
|
30646
|
+
platform: process.platform,
|
|
30647
|
+
memoryUsage: {
|
|
30648
|
+
heapUsed: `${Math.round(process.memoryUsage().heapUsed / 1024 / 1024)} MB`,
|
|
30649
|
+
heapTotal: `${Math.round(process.memoryUsage().heapTotal / 1024 / 1024)} MB`
|
|
30650
|
+
},
|
|
30651
|
+
accountId: params.accountId,
|
|
30652
|
+
hasProxy: !!(params.proxyLoc || params.localIP)
|
|
30653
|
+
});
|
|
30654
|
+
}
|
|
30641
30655
|
const check = {
|
|
30642
30656
|
isValidSession: false,
|
|
30643
30657
|
isValidWebSession: false
|
|
@@ -30674,7 +30688,32 @@ var __webpack_exports__ = {};
|
|
|
30674
30688
|
if (cookie.name && cookie.value) acc[cookie.name] = cookie.value;
|
|
30675
30689
|
return acc;
|
|
30676
30690
|
}, {});
|
|
30677
|
-
|
|
30691
|
+
let loginBaseXsHeader;
|
|
30692
|
+
try {
|
|
30693
|
+
loginBaseXsHeader = sessionCheck_xsEncrypt.signHeadersGet(loginBasePath, recordCookie, "xhs-pc-web", null);
|
|
30694
|
+
} catch (signError) {
|
|
30695
|
+
_task.logger?.error("[XhsSessionCheck] 签名生成失败 - 环境快照", {
|
|
30696
|
+
accountId: params.accountId,
|
|
30697
|
+
error: signError instanceof Error ? signError.message : String(signError),
|
|
30698
|
+
stack: _task.debug ? signError instanceof Error ? signError.stack : void 0 : void 0,
|
|
30699
|
+
hasA1: !!recordCookie.a1,
|
|
30700
|
+
env: {
|
|
30701
|
+
processType: process.type,
|
|
30702
|
+
memoryUsage: {
|
|
30703
|
+
heapUsed: `${Math.round(process.memoryUsage().heapUsed / 1024 / 1024)} MB`,
|
|
30704
|
+
heapTotal: `${Math.round(process.memoryUsage().heapTotal / 1024 / 1024)} MB`
|
|
30705
|
+
},
|
|
30706
|
+
hasProxy: !!(params.proxyLoc || params.localIP),
|
|
30707
|
+
timeSinceLastLog: Date.now() - lastEnvLogTime
|
|
30708
|
+
}
|
|
30709
|
+
});
|
|
30710
|
+
return {
|
|
30711
|
+
code: 500,
|
|
30712
|
+
message: "账号签名生成失败,请稍后重试。",
|
|
30713
|
+
data: check
|
|
30714
|
+
};
|
|
30715
|
+
}
|
|
30716
|
+
const baseInfoStart = Date.now();
|
|
30678
30717
|
const _baseInfo = http.api({
|
|
30679
30718
|
method: "get",
|
|
30680
30719
|
baseURL: "https://creator.xiaohongshu.com",
|
|
@@ -30683,23 +30722,43 @@ var __webpack_exports__ = {};
|
|
|
30683
30722
|
}, {
|
|
30684
30723
|
retries: 3,
|
|
30685
30724
|
retryDelay: 20,
|
|
30686
|
-
timeout:
|
|
30687
|
-
}).catch((e)=>
|
|
30725
|
+
timeout: 5000
|
|
30726
|
+
}).catch((e)=>{
|
|
30727
|
+
const clientTimestamp = Date.now();
|
|
30728
|
+
const serverDate = e?.extra?.serverDate;
|
|
30729
|
+
const serverTimestamp = serverDate ? new Date(serverDate).getTime() : null;
|
|
30730
|
+
const timeDriftMs = serverTimestamp ? clientTimestamp - serverTimestamp : null;
|
|
30731
|
+
_task.logger?.warn("[XhsSessionCheck] creator base 接口请求失败", {
|
|
30732
|
+
accountId: params.accountId,
|
|
30733
|
+
duration: Date.now() - baseInfoStart,
|
|
30734
|
+
code: e?.code,
|
|
30735
|
+
message: e?.message,
|
|
30736
|
+
data: e?.data,
|
|
30737
|
+
extra: e?.extra,
|
|
30738
|
+
proxyInfo: http.proxyInfo,
|
|
30739
|
+
clientTimestamp,
|
|
30740
|
+
serverDate,
|
|
30741
|
+
serverTimestamp,
|
|
30742
|
+
timeDriftMs,
|
|
30743
|
+
isLikelyClockDrift: null !== timeDriftMs && Math.abs(timeDriftMs) > 300000
|
|
30744
|
+
});
|
|
30745
|
+
return e.data;
|
|
30746
|
+
});
|
|
30688
30747
|
const _web_session = http.api({
|
|
30689
30748
|
method: "get",
|
|
30690
30749
|
url: "https://edith.xiaohongshu.com/api/sns/web/unread_count"
|
|
30691
30750
|
}, {
|
|
30692
30751
|
retries: 3,
|
|
30693
30752
|
retryDelay: 20,
|
|
30694
|
-
timeout:
|
|
30753
|
+
timeout: 5000
|
|
30695
30754
|
});
|
|
30696
30755
|
const [baseInfo, web_session] = await Promise.all([
|
|
30697
30756
|
_baseInfo,
|
|
30698
30757
|
_web_session
|
|
30699
30758
|
]);
|
|
30700
30759
|
if (baseInfo?.code === 0) check.isValidSession = true;
|
|
30701
|
-
if (
|
|
30702
|
-
baseInfo?.code, web_session
|
|
30760
|
+
if (web_session?.code === 0) check.isValidWebSession = true;
|
|
30761
|
+
baseInfo?.code, web_session?.code;
|
|
30703
30762
|
const message = `小红书账号有效性检测成功${_task.debug ? ` ${http.proxyInfo}` : ""}`;
|
|
30704
30763
|
return success(check, message);
|
|
30705
30764
|
};
|
|
@@ -34720,7 +34779,10 @@ var __webpack_exports__ = {};
|
|
|
34720
34779
|
task.logger.info(`拦截器收到响应response.data: ${JSON.stringify(response.data)} `);
|
|
34721
34780
|
decision = parseVerifyPassportDecision(response.headers["x-tt-verify-passport-decision"]);
|
|
34722
34781
|
if (needsVerification(decision)) {
|
|
34723
|
-
task.logger.
|
|
34782
|
+
task.logger.warn(`检测到需要验证: ${JSON.stringify(decision)}`);
|
|
34783
|
+
task.logger.warn(`验证类型: ${decision?.verify_ways?.join(", ")}`);
|
|
34784
|
+
task.logger.warn(`验证标题: ${decision?.verify_title}`);
|
|
34785
|
+
task.logger.warn(`验证描述: ${decision?.verify_desc}`);
|
|
34724
34786
|
return;
|
|
34725
34787
|
}
|
|
34726
34788
|
if (!response || !response.data) return;
|
|
@@ -34747,38 +34809,116 @@ var __webpack_exports__ = {};
|
|
|
34747
34809
|
});
|
|
34748
34810
|
return utils_response(0, message, data);
|
|
34749
34811
|
}
|
|
34750
|
-
|
|
34751
|
-
|
|
34752
|
-
|
|
34753
|
-
|
|
34754
|
-
|
|
34812
|
+
let webProtectData;
|
|
34813
|
+
try {
|
|
34814
|
+
webProtectData = JSON.parse(JSON.parse(params.extraParam["security-sdk/s_sdk_sign_data_key/web_protect"] || "{}").data || "{}");
|
|
34815
|
+
if (!webProtectData.ticket || !webProtectData.ts_sign || !webProtectData.client_cert) {
|
|
34816
|
+
task.logger.error(`webProtectData 关键字段缺失: ${JSON.stringify(webProtectData)}`);
|
|
34817
|
+
return utils_response(414, "安全参数 webProtectData 不完整,请重新获取后重试", "");
|
|
34818
|
+
}
|
|
34819
|
+
} catch (error) {
|
|
34820
|
+
task.logger.error(`解析 webProtectData 失败: ${error}`);
|
|
34821
|
+
return utils_response(414, "安全参数 webProtectData 解析失败,请重新获取后重试", "");
|
|
34822
|
+
}
|
|
34823
|
+
let ticket = webProtectData.ticket;
|
|
34824
|
+
let ts_sign = webProtectData.ts_sign;
|
|
34825
|
+
const serverDataCookie = params.cookies.find((it)=>"bd_ticket_guard_server_data" === it.name)?.value;
|
|
34826
|
+
if (serverDataCookie) try {
|
|
34827
|
+
const decoded = JSON.parse(Buffer.from(decodeURIComponent(serverDataCookie), "base64").toString("utf8"));
|
|
34828
|
+
if (decoded.ticket && decoded.ts_sign) {
|
|
34829
|
+
if (decoded.ticket !== ticket) task.logger.info("使用 cookie 中的最新 ticket(web_protect 已过期)");
|
|
34830
|
+
ticket = decoded.ticket;
|
|
34831
|
+
ts_sign = decoded.ts_sign;
|
|
34832
|
+
}
|
|
34833
|
+
} catch (error) {
|
|
34834
|
+
task.logger.warn(`解析 bd_ticket_guard_server_data 失败,回退到 web_protect: ${error}`);
|
|
34835
|
+
}
|
|
34836
|
+
let ec_privateKey;
|
|
34837
|
+
try {
|
|
34838
|
+
ec_privateKey = JSON.parse(JSON.parse(params.extraParam["security-sdk/s_sdk_crypt_sdk"] || "{}").data || "{}").ec_privateKey;
|
|
34839
|
+
if (!ec_privateKey) {
|
|
34840
|
+
task.logger.error("ec_privateKey 为空");
|
|
34841
|
+
return utils_response(414, "安全参数 ec_privateKey 缺失,请重新获取后重试", "");
|
|
34842
|
+
}
|
|
34843
|
+
} catch (error) {
|
|
34844
|
+
task.logger.error(`解析 ec_privateKey 失败: ${error}`);
|
|
34845
|
+
return utils_response(414, "安全参数 ec_privateKey 解析失败,请重新获取后重试", "");
|
|
34846
|
+
}
|
|
34847
|
+
let certificate;
|
|
34848
|
+
try {
|
|
34849
|
+
certificate = JSON.parse(params.extraParam["security-sdk/s_sdk_server_cert_key"] || "{}").cert;
|
|
34850
|
+
if (!certificate) {
|
|
34851
|
+
task.logger.error("certificate 为空");
|
|
34852
|
+
return utils_response(414, "安全参数 certificate 缺失,请重新获取后重试", "");
|
|
34853
|
+
}
|
|
34854
|
+
} catch (error) {
|
|
34855
|
+
task.logger.error(`解析 certificate 失败: ${error}`);
|
|
34856
|
+
return utils_response(414, "安全参数 certificate 解析失败,请重新获取后重试", "");
|
|
34857
|
+
}
|
|
34755
34858
|
const ree_public_key = webProtectData.client_cert.replace("pub.", "");
|
|
34756
|
-
task.logger.info(`生成 bdTicketGuardClientData 的参数: ticket: ${ticket
|
|
34757
|
-
|
|
34758
|
-
|
|
34759
|
-
|
|
34760
|
-
|
|
34761
|
-
|
|
34762
|
-
|
|
34763
|
-
|
|
34764
|
-
|
|
34765
|
-
|
|
34766
|
-
|
|
34859
|
+
task.logger.info(`生成 bdTicketGuardClientData 的参数: ticket: ${ticket?.substring(0, 20)}..., ts_sign: ${ts_sign}, ree_public_key: ${ree_public_key?.substring(0, 20)}...`);
|
|
34860
|
+
let bdTicketGuardClientData;
|
|
34861
|
+
try {
|
|
34862
|
+
bdTicketGuardClientData = getBdV2({
|
|
34863
|
+
ticket,
|
|
34864
|
+
ts_sign: ts_sign,
|
|
34865
|
+
ec_privateKey: ec_privateKey,
|
|
34866
|
+
certificate: certificate,
|
|
34867
|
+
bd_ticket_guard_ree_public_key: ree_public_key
|
|
34868
|
+
});
|
|
34869
|
+
if (!bdTicketGuardClientData || !bdTicketGuardClientData["headers_bd_ticket_guard_client_data"]) {
|
|
34870
|
+
task.logger.error(`bdTicketGuardClientData 生成失败或不完整: ${JSON.stringify(bdTicketGuardClientData)}`);
|
|
34871
|
+
return utils_response(414, "安全参数 bdTicketGuardClientData 生成失败,请重新获取后重试", "");
|
|
34872
|
+
}
|
|
34873
|
+
} catch (error) {
|
|
34874
|
+
task.logger.error(`生成 bdTicketGuardClientData 失败: ${error}`);
|
|
34875
|
+
return utils_response(414, "安全参数 bdTicketGuardClientData 生成异常,请重新获取后重试", "");
|
|
34876
|
+
}
|
|
34877
|
+
task.logger.info("bdTicketGuardClientData 生成成功");
|
|
34767
34878
|
const publishQuery = {
|
|
34768
34879
|
...publishParams,
|
|
34769
34880
|
a_bogus: ""
|
|
34770
34881
|
};
|
|
34771
34882
|
const queryString = new URLSearchParams(publishQuery).toString();
|
|
34772
|
-
|
|
34883
|
+
let aBogus;
|
|
34884
|
+
try {
|
|
34885
|
+
aBogus = mock_getABogus(`https://creator.douyin.com/web/api/media/aweme/create_v2/?${queryString}`, publishData, userAgent);
|
|
34886
|
+
if (!aBogus || aBogus.length < 10) {
|
|
34887
|
+
task.logger.error(`a_bogus 生成异常,长度过短: ${aBogus}`);
|
|
34888
|
+
return utils_response(414, "安全参数 a_bogus 生成失败,请重试", "");
|
|
34889
|
+
}
|
|
34890
|
+
task.logger.info(`a_bogus 生成成功: ${aBogus.substring(0, 20)}...`);
|
|
34891
|
+
} catch (error) {
|
|
34892
|
+
task.logger.error(`生成 a_bogus 失败: ${error}`);
|
|
34893
|
+
return utils_response(414, "安全参数 a_bogus 生成异常,请重试", "");
|
|
34894
|
+
}
|
|
34773
34895
|
publishQuery.a_bogus = aBogus;
|
|
34774
34896
|
const publishQueryParams = new URLSearchParams(publishQuery).toString();
|
|
34775
|
-
|
|
34776
|
-
|
|
34777
|
-
|
|
34778
|
-
|
|
34779
|
-
|
|
34780
|
-
|
|
34781
|
-
|
|
34897
|
+
let csrfToken;
|
|
34898
|
+
try {
|
|
34899
|
+
csrfToken = mock_generateCsrfTokenAdvanced({
|
|
34900
|
+
cookies: params.cookies,
|
|
34901
|
+
url: "https://creator.douyin.com/web/api/media/aweme/create_v2/",
|
|
34902
|
+
method: "POST",
|
|
34903
|
+
userAgent
|
|
34904
|
+
});
|
|
34905
|
+
if (!csrfToken || csrfToken.length < 10) {
|
|
34906
|
+
task.logger.error(`csrfToken 生成异常,长度过短: ${csrfToken}`);
|
|
34907
|
+
return utils_response(414, "安全参数 csrfToken 生成失败,请重试", "");
|
|
34908
|
+
}
|
|
34909
|
+
task.logger.info(`csrfToken 生成成功: ${csrfToken.substring(0, 20)}...`);
|
|
34910
|
+
} catch (error) {
|
|
34911
|
+
task.logger.error(`生成 csrfToken 失败: ${error}`);
|
|
34912
|
+
return utils_response(414, "安全参数 csrfToken 生成异常,请重试", "");
|
|
34913
|
+
}
|
|
34914
|
+
let sessionDtrait;
|
|
34915
|
+
try {
|
|
34916
|
+
sessionDtrait = mock_generateDtrait("/web/api/media/aweme/create_v2/");
|
|
34917
|
+
task.logger.info(`sessionDtrait 生成成功: ${sessionDtrait || "(空)"}`);
|
|
34918
|
+
} catch (error) {
|
|
34919
|
+
task.logger.error(`生成 sessionDtrait 失败: ${error}`);
|
|
34920
|
+
return utils_response(414, "安全参数 sessionDtrait 生成异常,请重试", "");
|
|
34921
|
+
}
|
|
34782
34922
|
task.logger.info("发布数据", {
|
|
34783
34923
|
data: JSON.stringify(publishData)
|
|
34784
34924
|
});
|
|
@@ -43385,6 +43525,33 @@ var __webpack_exports__ = {};
|
|
|
43385
43525
|
const encode_mnsv2 = __webpack_require__("./src/utils/xhs_ob/x_s.encoder.js");
|
|
43386
43526
|
const xiaohongshuLogin_rpa_server_scanRetryMaxCount = 60;
|
|
43387
43527
|
const xiaohongshuLogin_rpa_server_waitQrcodeResultMaxTime = 2000 * xiaohongshuLogin_rpa_server_scanRetryMaxCount;
|
|
43528
|
+
async function collectCookiesWithA1(task) {
|
|
43529
|
+
const hasA1 = (cookies)=>cookies.some((c)=>"a1" === c.name && !!c.value);
|
|
43530
|
+
let cookies = await task.steelBrowserContext?.cookies() ?? [];
|
|
43531
|
+
if (hasA1(cookies)) return cookies;
|
|
43532
|
+
task.logger?.warn("[XhsLogin] 首次抓取缺失 a1,尝试补救……");
|
|
43533
|
+
try {
|
|
43534
|
+
const page = task.steelBrowserContext?.pages?.()[0];
|
|
43535
|
+
if (page) {
|
|
43536
|
+
await page.goto("https://www.xiaohongshu.com", {
|
|
43537
|
+
waitUntil: "domcontentloaded",
|
|
43538
|
+
timeout: 15000
|
|
43539
|
+
});
|
|
43540
|
+
for(let i = 0; i < 10; i++){
|
|
43541
|
+
cookies = await task.steelBrowserContext?.cookies() ?? [];
|
|
43542
|
+
if (hasA1(cookies)) {
|
|
43543
|
+
task.logger?.info(`[XhsLogin] a1 补救成功,第 ${i + 1} 次轮询命中`);
|
|
43544
|
+
return cookies;
|
|
43545
|
+
}
|
|
43546
|
+
await new Promise((resolve)=>setTimeout(resolve, 500));
|
|
43547
|
+
}
|
|
43548
|
+
}
|
|
43549
|
+
} catch (err) {
|
|
43550
|
+
task.logger?.warn("[XhsLogin] a1 补救访问主站失败", err);
|
|
43551
|
+
}
|
|
43552
|
+
cookies = await task.steelBrowserContext?.cookies() ?? [];
|
|
43553
|
+
return cookies;
|
|
43554
|
+
}
|
|
43388
43555
|
const xiaohongshuLogin_rpa_server_rpaServer = async (task, params)=>{
|
|
43389
43556
|
const updateTaskState = task.taskStageStore?.update?.bind(task.taskStageStore, task.taskId || "");
|
|
43390
43557
|
const reporter = task.reportService?.reportLoginStatus ?? (()=>Promise.resolve());
|
|
@@ -43585,21 +43752,29 @@ var __webpack_exports__ = {};
|
|
|
43585
43752
|
};
|
|
43586
43753
|
}
|
|
43587
43754
|
case types_ExecutionState.SUCCESS:
|
|
43588
|
-
|
|
43589
|
-
|
|
43590
|
-
|
|
43591
|
-
|
|
43592
|
-
|
|
43593
|
-
}
|
|
43594
|
-
|
|
43595
|
-
|
|
43596
|
-
|
|
43597
|
-
|
|
43598
|
-
|
|
43599
|
-
|
|
43600
|
-
|
|
43601
|
-
}
|
|
43602
|
-
|
|
43755
|
+
{
|
|
43756
|
+
const cookies = await collectCookiesWithA1(task);
|
|
43757
|
+
const hasA1 = cookies.some((c)=>"a1" === c.name && !!c.value);
|
|
43758
|
+
if (!hasA1) task.logger?.warn("[XhsLogin] 登录成功但缺失关键 cookie a1,后续检测可能失败", {
|
|
43759
|
+
cookieNames: cookies.map((c)=>c.name)
|
|
43760
|
+
});
|
|
43761
|
+
const cookieStr = JSON.stringify(cookies);
|
|
43762
|
+
await updateTaskState?.({
|
|
43763
|
+
state: types_TaskState.SUCCESS,
|
|
43764
|
+
result: {
|
|
43765
|
+
cookie: cookieStr,
|
|
43766
|
+
userInfo: userInfo
|
|
43767
|
+
}
|
|
43768
|
+
});
|
|
43769
|
+
return {
|
|
43770
|
+
code: 0,
|
|
43771
|
+
message: "成功",
|
|
43772
|
+
data: {
|
|
43773
|
+
cookie: cookieStr,
|
|
43774
|
+
userInfo
|
|
43775
|
+
}
|
|
43776
|
+
};
|
|
43777
|
+
}
|
|
43603
43778
|
default:
|
|
43604
43779
|
return {
|
|
43605
43780
|
code: 500,
|
|
@@ -43800,6 +43975,14 @@ var __webpack_exports__ = {};
|
|
|
43800
43975
|
const fileName = getFilenameFromUrl(url);
|
|
43801
43976
|
const localUrl = await downloadImage(url, external_node_path_default().join(tmpCachePath, fileName));
|
|
43802
43977
|
const fileBuffer = external_node_fs_default().readFileSync(localUrl);
|
|
43978
|
+
let width = 0;
|
|
43979
|
+
let height = 0;
|
|
43980
|
+
try {
|
|
43981
|
+
const dimensions = imageSize(fileBuffer);
|
|
43982
|
+
width = dimensions.width ?? 0;
|
|
43983
|
+
height = dimensions.height ?? 0;
|
|
43984
|
+
} catch {}
|
|
43985
|
+
const originSize = fileBuffer.byteLength / 1024;
|
|
43803
43986
|
const MAX_RETRIES = uploadInfos.length;
|
|
43804
43987
|
let attempt = 0;
|
|
43805
43988
|
while(attempt < MAX_RETRIES){
|
|
@@ -43821,7 +44004,10 @@ var __webpack_exports__ = {};
|
|
|
43821
44004
|
});
|
|
43822
44005
|
return {
|
|
43823
44006
|
ossFileId,
|
|
43824
|
-
ossToken
|
|
44007
|
+
ossToken,
|
|
44008
|
+
width,
|
|
44009
|
+
height,
|
|
44010
|
+
originSize
|
|
43825
44011
|
};
|
|
43826
44012
|
} catch (error) {
|
|
43827
44013
|
attempt++;
|
|
@@ -43829,7 +44015,10 @@ var __webpack_exports__ = {};
|
|
|
43829
44015
|
}
|
|
43830
44016
|
return {
|
|
43831
44017
|
ossFileId: "",
|
|
43832
|
-
ossToken: ""
|
|
44018
|
+
ossToken: "",
|
|
44019
|
+
width,
|
|
44020
|
+
height,
|
|
44021
|
+
originSize
|
|
43833
44022
|
};
|
|
43834
44023
|
};
|
|
43835
44024
|
const coverInfos = await Promise.all(params.banners.map((it, idx)=>uploadFile(it, idx)));
|
|
@@ -43894,8 +44083,16 @@ var __webpack_exports__ = {};
|
|
|
43894
44083
|
},
|
|
43895
44084
|
image_info: {
|
|
43896
44085
|
images: coverInfos.map((it)=>({
|
|
43897
|
-
extra_info_json:
|
|
44086
|
+
extra_info_json: JSON.stringify({
|
|
44087
|
+
mimeType: "image/png",
|
|
44088
|
+
image_metadata: {
|
|
44089
|
+
bg_color: "",
|
|
44090
|
+
origin_size: it.originSize
|
|
44091
|
+
}
|
|
44092
|
+
}),
|
|
43898
44093
|
file_id: it.ossFileId,
|
|
44094
|
+
width: it.width,
|
|
44095
|
+
height: it.height,
|
|
43899
44096
|
metadata: {
|
|
43900
44097
|
source: -1
|
|
43901
44098
|
},
|