| 123456789101112131415161718192021222324252627282930313233343536 |
- // scripts/scrape-alicloud-qwen-tts.js — playwright 拿到阿里云页面渲染后 DOM 文本
- const { chromium } = require('playwright');
- const fs = require('fs');
- const os = require('os');
- const path = require('path');
- (async () => {
- const url = process.argv[2] || 'https://help.aliyun.com/zh/model-studio/qwen-tts-voice-list';
- const out = process.argv[3] || path.join(os.tmpdir(), 'qwen-tts-dom.txt');
- const browser = await chromium.launch({ headless: true });
- const page = await browser.newPage({ userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36' });
- await page.goto(url, { waitUntil: 'domcontentloaded', timeout: 30000 });
- // 等动态内容渲染(阿里云页面通常会做几秒的分批加载)
- for (let i = 0; i < 10; i++) {
- await page.waitForTimeout(2000);
- const tables = await page.locator('table').count();
- console.log(` attempt ${i + 1}: tables=${tables}`);
- if (tables > 0) break;
- }
- // 渲染后 DOM 文本(去 script/style)
- const text = await page.evaluate(() => {
- document.querySelectorAll('script,style,noscript').forEach(e => e.remove());
- return document.body.innerText;
- });
- fs.writeFileSync(out, text, 'utf8');
- console.log(`dom text: ${text.length} bytes → ${out}`);
- console.log(`first 500 chars:`);
- console.log(text.slice(0, 500));
- await browser.close();
- })().catch(e => { console.error(e); process.exit(1); });
|