Puppeteer操作Doordash注册页:导航超时及输入框点击问题求助
解决Doordash Puppeteer批量注册的两个问题
问题1:Navigation timeout of 30000 ms exceeded
原因及解决方案
页面加载缓慢、动态资源过多或反爬机制限制都可能导致超时,可通过以下方式解决:
- 延长超时时间并调整加载完成判断条件:将超时时间延长至60秒,同时使用
networkidle2替代默认的load,当网络连接数低于2个持续500ms时认为页面加载完成 - 禁用非必要资源加载:阻止图片、CSS、字体等资源请求,加快页面加载速度
- 模拟真实浏览器UA:设置符合主流浏览器的User-Agent,避免被反爬识别
代码示例:
// 设置User-Agent await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'); // 拦截非必要资源 await page.setRequestInterception(true); page.on('request', (req) => { if (['image', 'stylesheet', 'font'].includes(req.resourceType())) { req.abort(); } else { req.continue(); } }); // 访问页面,延长超时并调整加载条件 await page.goto('https://www.doordash.com/', { timeout: 60000, waitUntil: 'networkidle2' });
问题2:无法激活FirstName输入框
原因及解决方案
你提供的选择器存在拼写错误(dov应为div),且Doordash的动态class(带sc-前缀)会随版本变更,稳定性差。建议使用基于placeholder、label等静态属性的选择器,并确保等待弹窗加载完成后再操作元素。
步骤及代码示例:
- 等待注册弹窗触发按钮并点击打开弹窗
- 等待FirstName输入框可见并可交互
- 通过
focus或直接DOM操作激活输入框并输入内容
// 等待并点击注册按钮(根据页面实际文本调整选择器) await page.waitForSelector('button:has-text("Sign Up")', { visible: true }); await page.click('button:has-text("Sign Up")'); // 等待FirstName输入框可见 await page.waitForSelector('input[placeholder="First name"]', { visible: true, timeout: 30000 }); // 激活输入框并输入内容(模拟人类输入速度) await page.focus('input[placeholder="First name"]'); await page.type('input[placeholder="First name"]', 'TestFirstName', { delay: 100 }); // 如果上述方法无效,可直接通过DOM操作 await page.evaluate(() => { const input = document.querySelector('input[placeholder="First name"]'); input.focus(); input.value = 'TestFirstName'; input.dispatchEvent(new Event('input')); // 触发输入事件,确保网站检测到内容变更 });
额外注意事项
Doordash有严格的反爬机制,批量注册建议加入随机延迟(如await page.waitForTimeout(Math.random() * 2000 + 1000)),避免短时间内频繁操作被封禁IP或账号。
内容的提问来源于stack exchange,提问作者JediSZN
相关产品推荐
相关产品推荐

