我们使用联盟链接。它们让我们能够维持运营,而您无需承担任何费用。

如何使用 Puppeteer 设置代理

这是有关如何使用无头 Chromium 设置和验证 Puppeteer 代理的分步指南。

如何在 Puppeteer 中设置代理

Puppeteer 是一个用于控制无头 Chromium 浏览器的 NodeJS 库。它是 网络抓取 JavaScript 密集型网站——Puppeteer 可以完全自动化大多数浏览器交互,如移动鼠标动作或填写表格,并且它得到了 Chromium 开发人员的支持。

Web 抓取和代理密不可分。因此,如果你想充分利用 Puppeteer – 避免 IP 地址被禁止和其他 网页抓取障碍 - 你需要 质量代理。但是在设置 Puppeteer 代理时事情并没有那么简单。

在本指南中,您将了解如何使用无头 Chrome 浏览器在 Puppeteer 中设置代理。此外,您还将了解使用 Puppeteer 设置代理时可能遇到的最常见问题。

如何使用 Puppeteer 设置代理

当您使用 Chrome 等常规浏览器时,代理身份验证很简单 - 您需要在弹出栏中添加凭据(用户名和密码)。但是,问题在于无头浏览器(在本例中为 Chromium)没有用户界面。这意味着没有视觉元素供您输入该信息。

Puppeteer 安装入门

开始之前,您需要以下工具:

  • Node.js – 它包含用于安装 Puppeteer 的包管理器 npm。
  • 代码编辑器 – 您可以使用任何您喜欢的代码编辑器。
然后,创建一个新文件夹,用于存储 JavaScript 文件。 步骤 1。 要设置 Puppeteer 代理,请运行 初始化命令 在您刚刚创建的文件夹中。
				
					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。 

Chris Becker 的照片
克里斯·贝克尔
代理审阅者和测试者。