vault backup: 2026-11-06 20:27:00

This commit is contained in:
admin committed 2026-11-06 20:27:00 +08:00
1 parent f7d1bff65f
commit 856d0203da
2 files changed
+235

No files matched your search

+63
View File
@@ -0,0 +1,63 @@
// 抓取内容分析页:作品列表 + 单篇数据
import { connect, attachPage, evaluate, saveJson, listPages } from './lib.mjs';
const cdp = await connect();
// 直接在百家号标签页内导航到内容分析
const hit = await attachPage(cdp, 'baijiahao.baidu.com');
if (!hit) { console.log('NO_TAB'); process.exit(1); }
const { sessionId } = hit;
// 先看内容分析页有哪些数据接口,装 XHR 钩子
await cdp.send('Page.enable', {}, sessionId).catch(() => {});
await cdp.send('Runtime.enable', {}, sessionId).catch(() => {});
await evaluate(cdp, sessionId, `(() => {
window.__CAP = window.__CAP || [];
if (!window.__HOOKED) {
window.__HOOKED = true;
const origOpen = XMLHttpRequest.prototype.open;
const origSend = XMLHttpRequest.prototype.send;
XMLHttpRequest.prototype.open = function(m, u) { this.__u = u; this.__m = m; return origOpen.apply(this, arguments); };
XMLHttpRequest.prototype.send = function() {
this.addEventListener('load', () => {
try {
const ct = this.getResponseHeader('content-type') || '';
if (ct.includes('json')) {
window.__CAP.push({ url: this.__u, body: this.responseText.slice(0, 200000) });
}
} catch (e) {}
});
return origSend.apply(this, arguments);
};
const origFetch = window.fetch;
window.fetch = function(...args) {
return origFetch.apply(this, args).then(res => {
try {
const u = (typeof args[0] === 'string') ? args[0] : args[0].url;
res.clone().text().then(t => {
if (t && (t[0] === '{' || t[0] === '[')) window.__CAP.push({ url: u, body: t.slice(0, 200000) });
}).catch(() => {});
} catch (e) {}
return res;
});
};
}
return 'hooked';
})()`);
// 导航到内容分析页
await evaluate(cdp, sessionId, `location.href = 'https://baijiahao.baidu.com/builder/rc/analysiscontent'`);
await new Promise(r => setTimeout(r, 9000));
const state = await evaluate(cdp, sessionId, `(() => ({
url: location.href,
title: document.title,
text: (document.body ? document.body.innerText : '').slice(0, 6000),
captured: (window.__CAP || []).map(x => x.url)
}))()`);
saveJson('out/analysis-content.json', state);
console.log('URL=' + String(state.url).replace(/[^\x20-\x7E]/g, '?'));
console.log('CAPTURED=' + (state.captured || []).length);
process.exit(0);