47 lines
1.5 KiB
TypeScript
47 lines
1.5 KiB
TypeScript
// 使用无头浏览器抓取指定页面的可见文本并保存到 refs/。
|
|
import { mkdir, writeFile } from 'node:fs/promises'
|
|
import { resolve } from 'node:path'
|
|
import { launchBrowser, newContext } from './browser.js'
|
|
import { ROOT } from './config.js'
|
|
|
|
/** 待抓取的参考资料:文件名与 URL */
|
|
const URLS: Array<[string, string]> = [
|
|
['deepseek_share', 'https://chat.deepseek.com/share/mwnjui93cvhspkrs1z'],
|
|
]
|
|
|
|
const OUT_DIR = resolve(ROOT, 'refs')
|
|
|
|
async function main(): Promise<void> {
|
|
await mkdir(OUT_DIR, { recursive: true })
|
|
const browser = await launchBrowser()
|
|
const context = await newContext(browser, { width: 1440, height: 1200 })
|
|
const page = await context.newPage()
|
|
try {
|
|
for (const [name, url] of URLS) {
|
|
try {
|
|
await page.goto(url)
|
|
await page.waitForTimeout(10000)
|
|
for (let i = 0; i < 6; i++) {
|
|
await page.evaluate(() => window.scrollBy(0, document.body.scrollHeight / 6))
|
|
await page.waitForTimeout(1500)
|
|
}
|
|
await page.evaluate(() => window.scrollTo(0, 0))
|
|
await page.waitForTimeout(1000)
|
|
const text = await page.evaluate(() => document.body.innerText)
|
|
await writeFile(resolve(OUT_DIR, `${name}.txt`), text, 'utf8')
|
|
console.log(`[OK] ${name} -> ${text.length} chars`)
|
|
} catch (err) {
|
|
console.log(`[FAIL] ${name}: ${err}`)
|
|
}
|
|
}
|
|
} finally {
|
|
await context.close()
|
|
await browser.close()
|
|
}
|
|
}
|
|
|
|
main().catch((err) => {
|
|
console.error('FAIL', err)
|
|
process.exit(1)
|
|
})
|