66 lines
2.1 KiB
TypeScript
66 lines
2.1 KiB
TypeScript
import http from 'node:http';
|
|
import type { AddressInfo } from 'node:net';
|
|
import { promisify } from 'node:util';
|
|
|
|
import { BrowserPool, PlaywrightPlugin, PuppeteerPlugin } from '@crawlee/browser-pool';
|
|
import playwright from 'playwright';
|
|
import type { Server as ProxyChainServer } from 'proxy-chain';
|
|
import puppeteer from 'puppeteer';
|
|
|
|
import { createProxyServer } from '../../../test/browser-pool/browser-plugins/create-proxy-server';
|
|
|
|
describe.each([
|
|
['Puppeteer', new PuppeteerPlugin(puppeteer, { useIncognitoPages: true })],
|
|
['Playwright', new PlaywrightPlugin(playwright.chromium, { useIncognitoPages: true })],
|
|
])('BrowserPool - %s - proxy sugar syntax', (_, plugin) => {
|
|
let target: http.Server;
|
|
let protectedProxy: ProxyChainServer;
|
|
|
|
beforeAll(async () => {
|
|
target = http.createServer((request, response) => {
|
|
response.end(request.socket.remoteAddress);
|
|
});
|
|
await promisify(target.listen.bind(target) as any)(0, '127.0.0.1');
|
|
|
|
protectedProxy = createProxyServer('127.0.0.2', 'foo', 'bar');
|
|
await protectedProxy.listen();
|
|
});
|
|
|
|
afterAll(async () => {
|
|
await promisify(target.close.bind(target))();
|
|
|
|
await protectedProxy.close(false);
|
|
});
|
|
|
|
test('should work', async () => {
|
|
const pool = new BrowserPool({
|
|
browserPlugins: [plugin],
|
|
});
|
|
|
|
const options = {
|
|
proxyUrl: `http://foo:bar@127.0.0.2:${protectedProxy.port}`,
|
|
pageOptions: {
|
|
proxy: {
|
|
bypass: '<-loopback>',
|
|
},
|
|
proxyBypassList: ['<-loopback>'],
|
|
},
|
|
};
|
|
|
|
const page = await pool.newPage(options);
|
|
|
|
const response = await page.goto(`http://127.0.0.1:${(target.address() as AddressInfo).port}`);
|
|
const content = await response!.text();
|
|
|
|
// Fails on Windows.
|
|
// See https://github.com/puppeteer/puppeteer/issues/7698
|
|
if (process.platform !== 'win32') {
|
|
expect(content).toBe('127.0.0.2');
|
|
}
|
|
|
|
await page.close();
|
|
|
|
await pool.destroy();
|
|
});
|
|
});
|