如何使用 Puppeteer 设置代理
这是有关如何使用无头 Chromium 设置和验证 Puppeteer 代理的分步指南。
Puppeteer 是一个用于控制无头 Chromium 浏览器的 NodeJS 库。它是 网络抓取 JavaScript 密集型网站——Puppeteer 可以完全自动化大多数浏览器交互,如移动鼠标动作或填写表格,并且它得到了 Chromium 开发人员的支持。
Web 抓取和代理密不可分。因此,如果你想充分利用 Puppeteer – 避免 IP 地址被禁止和其他 网页抓取障碍 - 你需要 质量代理。但是在设置 Puppeteer 代理时事情并没有那么简单。
在本指南中,您将了解如何使用无头 Chrome 浏览器在 Puppeteer 中设置代理。此外,您还将了解使用 Puppeteer 设置代理时可能遇到的最常见问题。
如何使用 Puppeteer 设置代理
当您使用 Chrome 等常规浏览器时,代理身份验证很简单 - 您需要在弹出栏中添加凭据(用户名和密码)。但是,问题在于无头浏览器(在本例中为 Chromium)没有用户界面。这意味着没有视觉元素供您输入该信息。
Puppeteer 安装入门
开始之前,您需要以下工具:
- Node.js – 它包含用于安装 Puppeteer 的包管理器 npm。
- 代码编辑器 – 您可以使用任何您喜欢的代码编辑器。
npm init -y
步骤 2。 安装 Puppeteer 包。
npm install puppeteer
如何在 Puppeteer 中设置带身份验证的代理
我们已经准备好 使用 Puppeteer 打开浏览器的真实示例,转到 ipinfo.io 网站,并抓取您的 IP 地址。此方法支持代理身份验证,是设置 Puppeteer 代理的最流行方法。它使用 Puppeteer 的 页面.authenticate() 字符串将您的代理凭据传递给浏览器。
如果你不需要验证你的代理, 删除或注释“proxyUser”、“proxyPass”和“await page.authenticate()”行。
步骤 1。 首先,导入 Puppeteer 包。
const puppeteer = require('puppeteer');
步骤 2。 让我们定义代理服务器、用户名和密码。然后启动浏览器。
(async () => {
const proxyServer = 'proxyserver.com:PORT';
const proxyUser = 'USERNAME';
const proxyPass = 'PASSWORD'
const browser = await puppeteer.launch({
args: [`--proxy-server=${proxyServer}`],
});
步骤 3。 启动浏览器后,启动一个新页面。
const page = await browser.newPage();
步骤 4。 然后,验证您的代理。
await page.authenticate({proxyUser, proxyPass});
步骤 5。 现在,让我们打开浏览器并开始抓取。
await page.goto('https://ipinfo.io');
1)为 ipinfo.io 网站上列出 IP 的元素创建 CSS 选择器。
const ipSelector = '#ip-string .text-green-05';
2) 告诉浏览器等待该元素出现。这将允许页面完全加载。
await page.waitForSelector(ipSelector);
3)使用上面的 CSS 选择器找到元素并将其分配给变量。
let ipElem = await page.$(ipSelector);
4)从该元素获取文本。
let ip = await page.evaluate(el => el.innerText, ipElem)
步骤 6。 打印出您的结果(在本例中为 IP 地址)。
console.log(ip);
步骤 7。 关闭浏览器。
await browser.close();
})();
以下是完整脚本:
const puppeteer = require('puppeteer');
(async () => {
const proxyServer = 'proxyserver.com:PORT';
const proxyUser = 'USERNAME';
const proxyPass = 'PASSWORD'
const browser = await puppeteer.launch({
args: [`--proxy-server=${proxyServer}`],
});
const page = await browser.newPage();
await page.authenticate({proxyUser, proxyPass});
await page.goto('https://ipinfo.io');
const ipSelector = '#ip-string .text-green-05';
await page.waitForSelector(ipSelector);
let ipElem = await page.$(ipSelector);
let ip = await page.evaluate(el => el.innerText, ipElem)
console.log(ip);
await browser.close();
})();
最常见的错误
页面未加载
如果您的互联网连接不稳定,Puppeteer 可能无法加载您的目标页面。在这种情况下,您应该在 木偶戏选项 对象。这样,您的连接就不会对您的抓取工具产生太大的影响。
const options = {
timeout: 20000,
}
其他事宜
并非所有代理都与 Puppeteer 兼容,因此你可能需要尝试 不同种类 找到一个有效的 IP 地址。此外,您的 IP 地址可能被目标网站屏蔽。如果是这种情况,请将您的 IP 更改为其他 IP。