【发布时间】:2021-08-02 11:30:54
【问题描述】:
我正在制作一个自动化脚本,用于使用 puppeteer 在线填写表格,并且为了不将 ip 列入黑名单,我决定为每个请求使用代理,这是给我错误的部分
console.log(`profile ${ii} started`)
let proxy = await proxy_rotation(proxy_data, ii);
console.log("using proxy: ", proxy);
let exec_path = path.resolve(path.dirname(process.execPath) + "/node_modules/puppeteer/.local-chromium/win64-869685/chrome-win/chrome.exe")
const browser = await puppeteer.launch({
executablePath: exec_path,
args: ['--disable-web-security']
});
const page = await browser.newPage();
console.log("1");
await page.setRequestInterception(true);
await useProxy(page, proxy);
console.log("2");
await page.goto(data[ii][0]); //this is where the error gets thrown
下面的这部分在使用代理时无法运行,没有它,运行平稳
console.log("3");
await page.type("#name", data[ii][1]);
await page.type("#yourEmail", data[ii][2]);
await page.type("#phone", data[ii][3]);
await page.type("#street", data[ii][4]);
await page.type("#city", data[ii][5]);
await page.type("#psc", data[ii][6]);
await page.select('select#state', data[ii][7]);
await page.select('select#prefered_size_sel', data[ii][8]);
await page.$eval('input[name="agreed_personal_info_tiny_contact_form"]', check => check.checked = true);
await page.evaluate(() => {
document.querySelector('input[name="agreed_personal_info_tiny_contact_form"]').click();
});
我只是在控制台记录了一些数字,以调试脚本卡住的位置。我还测试了我尝试使用代理测试器和手动访问的代理和网站,并且访问它没有问题
但是当我运行我的脚本时,我得到了这个 我明白它几乎说它无法访问该网址,但应该没有理由这样做。使用代理时是否需要更改访问 url 的方式?或者在浏览器中添加一些额外的参数?我可以以某种方式获得更具体的错误消息吗?感谢您的任何建议
这也是引发错误的 puppeteer 函数
async function navigate(client, url, referrer, frameId) {
try {
const response = await client.send('Page.navigate', {
url,
referrer,
frameId,
});
ensureNewDocumentNavigation = !!response.loaderId;
return response.errorText
? new Error(`${response.errorText} at ${url}`)
: null;
}
catch (error) {
return error;
}
}
【问题讨论】:
-
你能显示你正在使用的代理的格式吗?
-
@Vaviloff 当然,
premium.guavaproxies.io:7147:customer-GUA_2xyCoQOO-cc-cz-sessid-Yywti97D-sesstime-30:ytEM6qcTH1基本上是用户:通过身份验证,我稍微更改了凭据,所以这个不起作用 -
不是 user:pass 应该在 URL 前面吗?
-
@Vaviloff 在 puppeteer-page-proxy github 中的演示用法是
await useProxy(page, 'http://127.0.0.1:80');,我也在这样做,当我手动测试时,我的代理确实在页面上工作。如果它是 user:pass,你还有什么建议我可以或应该使用代理? -
你没有这样做 - 你的代理有用户/通过身份验证,需要这样格式化。
标签: node.js proxy puppeteer http-proxy