Playwright proxy setup, pagkonekta ng ibang IP bawat browser at context
Ang gabay na ito ay nagpapaliwanag kung paano ikonekta ang HTTP proxy at SOCKS5 proxy ng Socks5Proxy sa proxy option ng Playwright gamit ang server, username, password, at kung paano gumamit ng iba't ibang IP bawat context sa iisang browser gamit ang Node.js at Python code.
Ano ang pinakaconvenient na proxy setup para sa Playwright?
Ang Playwright ay tumatanggap ng proxy address, username, at password bilang iisang proxy option, kaya hindi mo na kailangang harapin ang proxy authentication dialog separately. Parehong option ang gamit para sa Chromium, Firefox, at WebKit browsers.
Pwede ring gumamit ng isang browser na may multiple contexts, bawat context ay may sariling proxy. Separate ang cookies at storage per context kaya pwedeng mag-handle ng multiple IPs at sessions sa isang browser para makatipid sa memory.
Ginagamit ang IP 198.51.100.23, HTTP port 8000, SOCKS5 port 1080, username spx_user, password spx_pass.
npm install playwright
npx playwright install chromiumPaano i-configure ang HTTP proxy para sa buong browser?
Ilagay ang server, username, at password sa proxy option ng launch para gamitin ng lahat ng page sa browser na iyon ang parehong proxy. Ang HTTPS site ay ipapasa sa pamamagitan ng encrypted CONNECT tunnel.
import { chromium } from "playwright";
const browser = await chromium.launch({
proxy: { server: "http://198.51.100.23:8000", username: "spx_user", password: "spx_pass" },
});
const page = await browser.newPage();
await page.goto("https://api.ipify.org");
console.log(await page.textContent("body")); // proxy IP
await browser.close();Paano gumamit ng iba't ibang IP per context?
Kapag naglagay ng proxy option sa newContext, ang context na iyon lamang ang gagamit ng proxy na iyon. Ang code sa ibaba ay kumukuha ng listahan sa pamamagitan ng API at gumagawa ng 3 context na may iba't ibang IP, at nagpi-print ng IP na nakikita sa bawat context. Sa mga gawain na sabay-sabay na hinahawakan ang maraming account, ipares ang isang account at isang IP sa isang context.
Sa ilang bersyon ng Chromium at Windows environment, kailangan din ng proxy option sa launch para magamit ang proxy bawat context. Sa ganitong kaso, ilagay ang unang proxy sa launch at i-overwrite ito bawat context.
import { chromium } from "playwright";
const KEY = "YOUR_API_KEY";
const res = await fetch("https://socks5proxy.io/api/v1/proxies/download?format=ip:port:user:pass&protocol=http", {
headers: { Authorization: "Bearer " + KEY },
});
const lines = (await res.text()).trim().split("\n").slice(0, 3);
const browser = await chromium.launch();
for (const line of lines) {
const [ip, port, user, pass] = line.trim().split(":");
const context = await browser.newContext({
proxy: { server: "http://" + ip + ":" + port, username: user, password: pass },
locale: "en-US",
});
const page = await context.newPage();
await page.goto("https://api.ipify.org");
console.log(ip, await page.textContent("body"));
await context.close();
}
await browser.close();Paano gamitin ang SOCKS5 proxy?
Ilagay ang socks5:// address sa server. Hindi sinusuportahan ng Chromium ang username at password authentication para sa SOCKS5 proxy, kaya inirerekomenda ang paggamit ng IP authorization para sa SOCKS5. I-register ang IPv4 ng running server sa dashboard at ilagay lamang ang server nang walang username at password.
Kung kailangang kumonekta gamit ang username at password, gamitin ang HTTP port ng parehong IP. Ang IP at lokasyon na nakikita sa target site ay pareho.
import { chromium } from "playwright";
const browser = await chromium.launch({
proxy: { server: "socks5://198.51.100.23:1080" }, // server IP is authorized in the dashboard
});
const page = await browser.newPage();
await page.goto("https://api.ipify.org");
console.log(await page.textContent("body"));
await browser.close();Paano gamitin sa Python?
Ang Playwright para sa Python ay pareho ang structure. Ilagay ang server, username, at password sa proxy dictionary. May synchronous example sa baba. Parehong option names ang gamit sa async mode.
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(proxy={
"server": "http://198.51.100.23:8000",
"username": "spx_user",
"password": "spx_pass",
})
page = browser.new_page()
page.goto("https://api.ipify.org")
print(page.text_content("body"))
browser.close()Ano ang kailangang i-align para magmukhang tulad ng mga gumagamit sa bansang iyon?
Itakda ang locale at timezoneId ng context ayon sa IP country para mag-render ang page sa wika at oras na nakikita ng mga user sa bansang iyon. Halimbawa, para sa Germany IP, gamitin ang locale na de-DE at timezoneId na Europe/Berlin.
Kung hindi kailangan ang images at videos, maaari mong i-block ang mga request na ito gamit ang page.route para makatipid sa bandwidth at oras. Lalo na itong kapaki-pakinabang para sa shared plans na may monthly bandwidth limit.
- Itugma ang locale at timezoneId sa bansa ng IP.
- Isang account, isang IP per context
- Gamitin ang page.route para i-block ang unnecessary image/video requests
- Ang SOCKS5 ay gumagamit ng IP authorization, habang ang username at password ay para sa HTTP port.
Paano ko maa-automate ang pagkuha at paghahati ng listahan para sa bawat task?
Ang GET /proxies sa API ay nagbabalik ng JSON na may IP, port, at bansa sa bawat line. Pwede kang mag-filter by country para makakuha ng list na angkop sa country-specific task. Ang code sa ibaba ay example para kumuha ng US proxy at gumawa ng context para sa bawat task. Makikita ang response field names sa API documentation.
Kung marami kang trabaho, huwag mong iwanang bukas ang context hanggang dulo. Isara ito pagkatapos ng bawat trabaho para maibalik ang memory.
import { chromium } from "playwright";
const KEY = "YOUR_API_KEY";
const res = await fetch("https://socks5proxy.io/api/v1/proxies?country=us&protocol=http", {
headers: { Authorization: "Bearer " + KEY },
});
const { proxies } = await res.json();
const browser = await chromium.launch();
for (const p of proxies.slice(0, 5)) {
const context = await browser.newContext({
proxy: { server: "http://" + p.host + ":" + p.http_port, username: p.username, password: p.password },
locale: "en-US",
timezoneId: "America/New_York",
});
const page = await context.newPage();
await page.goto("https://api.ipify.org");
console.log(await page.textContent("body"));
await context.close();
}
await browser.close();Paano iwasan ang unnecessary requests para makatipid ng bandwidth?
Sa pamamagitan ng page.route o context.route, maaari mong harangin ang mga request para sa mga larawan, font, at video para mas mabilis magbukas ang page at makatipid ng proxy bandwidth. Lalo na ito kapaki-pakinabang sa mga gawain ng data collection na nangangailangan lamang ng data.
await context.route("**/*", (route) => {
const type = route.request().resourceType();
return ["image", "font", "media"].includes(type) ? route.abort() : route.continue();
});Gumagamit din ba ng parehong proxy ang Firefox at WebKit?
Oo. Ang Playwright ay tumatanggap ng parehong proxy option para sa lahat ng browser. Kung ikaw ay isang testing team, maaari mong i-test ang Chromium, Firefox, at WebKit gamit ang parehong proxy para masiguro na pareho ang mga country-specific screen sa bawat browser.
Tulad ng Chromium, ang Firefox ay hindi sumusuporta sa SOCKS5 username at password authentication sa browser, kaya ikonekta ang SOCKS5 gamit ang IP authorization. Ang HTTP port ay konektado gamit ang username at password sa lahat ng tatlong browser.
Kung gumagamit ka ng Playwright Test, maaari mong ilagay ang proxy sa use section ng playwright.config para ma-apply sa lahat ng tests, o hatiin ang project bawat bansa at magbigay ng iba't ibang proxy sa bawat isa.
import { defineConfig } from "@playwright/test";
export default defineConfig({
projects: [
{ name: "us", use: { locale: "en-US", proxy: { server: "http://198.51.100.23:8000", username: "spx_user", password: "spx_pass" } } },
{ name: "de", use: { locale: "de-DE", proxy: { server: "http://198.51.100.24:8000", username: "spx_user", password: "spx_pass" } } },
],
});Paano malulutas ang mga common errors?
Ang net::ERR_PROXY_CONNECTION_FAILED ay nangyayari kapag mali ang server address o port. Ang 407 o mga error na may kinalaman sa authentication ay nangangailangan ng pagsusuri sa username at password value. Ang error na 'Browser does not support socks5 proxy authentication' ay lumalabas kapag naglagay ng username at password sa SOCKS5. Baguhin ito sa IP authorization o gamitin ang HTTP port.