scrape-alicloud-qwen-tts.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536
  1. // scripts/scrape-alicloud-qwen-tts.js — playwright 拿到阿里云页面渲染后 DOM 文本
  2. const { chromium } = require('playwright');
  3. const fs = require('fs');
  4. const os = require('os');
  5. const path = require('path');
  6. (async () => {
  7. const url = process.argv[2] || 'https://help.aliyun.com/zh/model-studio/qwen-tts-voice-list';
  8. const out = process.argv[3] || path.join(os.tmpdir(), 'qwen-tts-dom.txt');
  9. const browser = await chromium.launch({ headless: true });
  10. 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' });
  11. await page.goto(url, { waitUntil: 'domcontentloaded', timeout: 30000 });
  12. // 等动态内容渲染(阿里云页面通常会做几秒的分批加载)
  13. for (let i = 0; i < 10; i++) {
  14. await page.waitForTimeout(2000);
  15. const tables = await page.locator('table').count();
  16. console.log(` attempt ${i + 1}: tables=${tables}`);
  17. if (tables > 0) break;
  18. }
  19. // 渲染后 DOM 文本(去 script/style)
  20. const text = await page.evaluate(() => {
  21. document.querySelectorAll('script,style,noscript').forEach(e => e.remove());
  22. return document.body.innerText;
  23. });
  24. fs.writeFileSync(out, text, 'utf8');
  25. console.log(`dom text: ${text.length} bytes → ${out}`);
  26. console.log(`first 500 chars:`);
  27. console.log(text.slice(0, 500));
  28. await browser.close();
  29. })().catch(e => { console.error(e); process.exit(1); });