// 导入必要的库 import puppeteer, { Browser } from 'puppeteer'; import path from 'path'; import { windowDimension } from './common'; // 搜索商品关键词并进行首次爬取 const searchSku = async (url: string, browser: Browser) => { console.log('正在爬取:', url); const page = await browser.newPage(); await page.goto(url, { waitUntil: 'networkidle2' }); // 等待页面加载 await page.waitForSelector('.tb-sku'); // 抓取SKU信息 const skus = await page.evaluate(() => { const skuElements = document.querySelectorAll('.tb-sku .tb-sku-label'); return Array.from(skuElements).map(el => el.innerText.trim()); }); page.close() console.log('SKU Information:', skus); return skus; }; // 开始爬取 export const skuList = async (goodsDetailUrls) => { const rl = require('readline').createInterface({ input: process.stdin, output: process.stdout }); let browser: Browser try { const USER_DATA_DIR = path.join(process.cwd(), 'tmp/user_data'); // 启动浏览器 browser = await puppeteer.launch({ headless: false, userDataDir: USER_DATA_DIR, defaultViewport: { width: windowDimension[0], height: windowDimension[1] }, args: [ "--no-sandbox", "--proxy-server=https=127.0.0.1:1080", "--ignore-certificate-errors", "--ignore-certificate-errors-spki-list", `--window-size=${windowDimension.join(',')}`, ] }); return await Promise.all(goodsDetailUrls.map(async url => await searchSku(url, browser))) // 保存Excel表格 } catch (error) { console.error('Crawer_main函数报错:', error); } finally { // @ts-expect-error if (browser) { await browser.close(); } if(rl) { rl.close() } } };