Tetapan Proxy Playwright, Menyambungkan IP Berbeza untuk Setiap Pelayar dan Konteks
Panduan ini menerangkan cara menyambung HTTP dan SOCKS5 proxy Socks5Proxy ke pilihan proxy Playwright menggunakan server, username, password, serta menggunakan IP berbeza untuk setiap konteks dalam pelayar yang sama dengan kod Node.js dan Python.
Apakah yang mudah dalam tetapan proxy Playwright?
Playwright menerima alamat proxy, nama pengguna, dan kata laluan sebagai satu pilihan proxy, jadi anda tidak perlu mengendalikan tingkap pengesahan secara berasingan. Ketiga-tiga pelayar Chromium, Firefox, dan WebKit menggunakan pilihan yang sama.
Anda juga boleh menjalankan satu penyemak imbas dengan beberapa konteks, setiap satu dengan proksi berbeza. Konteks adalah profil berasingan dengan kuki dan storan yang berbeza, membolehkan anda mengendalikan banyak IP dan sesi dengan satu penyemak imbas untuk menjimatkan memori.
Contoh menggunakan IP 198.51.100.23, port HTTP 8000, port SOCKS5 1080, username spx_user, dan password spx_pass.
npm install playwright
npx playwright install chromiumBagaimana cara menyambungkan proksi HTTP ke seluruh pelayar?
Dengan menambah server, username, dan password dalam pilihan proxy launch, semua halaman dalam pelayar tersebut akan menggunakan proksi yang sama. Laman HTTPS dihantar melalui terowong CONNECT yang disulitkan.
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();Bagaimana menggunakan IP berbeda untuk setiap konteks?
Dengan menambah pilihan proxy dalam newContext, hanya konteks tersebut yang akan menggunakan proksi tersebut. Kod di bawah menerima senarai melalui API, membuat 3 konteks dengan IP yang berbeza, dan mencetak IP yang dilihat dalam setiap konteks. Untuk menguruskan banyak akaun serentak, pasangkan satu akaun dan satu IP dalam setiap konteks.
Beberapa versi Chromium dan lingkungan Windows memerlukan opsi proxy di launch untuk menggunakan proxy per konteks. Dalam kasus tersebut, Anda dapat menambahkan proxy pertama ke launch dan menimpanya per konteks.
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();Bagaimana untuk menggunakan proksi SOCKS5?
Gunakan alamat socks5:// dalam server. Chromium tidak menyokong pengesahan nama pengguna/kata laluan SOCKS5, jadi disyorkan untuk menyambung ke SOCKS5 dengan pengesahan IP. Daftarkan IPv4 pelayan pelaksanaan dalam dashboard dan gunakan server sahaja tanpa username dan password.
Jika anda perlu menyambung dengan nama pengguna dan kata laluan, gunakan port HTTP IP yang sama. IP dan lokasi yang dilihat oleh laman web sasaran adalah sama.
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();Bagaimana cara menggunakannya dalam Python?
Playwright untuk Python mempunyai struktur yang sama. Masukkan server, username, password ke dalam kamus proxy. Contoh mod segerak terdapat di bawah. Nama pilihan untuk mod tak segerak adalah sama.
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()Apa yang perlu diselaraskan untuk membuat hasil kelihatan seperti pengguna negara tersebut?
Dengan menetapkan locale dan timezoneId konteks mengikut negara IP, halaman akan dipaparkan dalam bahasa dan waktu seperti yang dilihat oleh pengguna negara tersebut. Contohnya, untuk IP Jerman, gunakan locale de-DE dan timezoneId Europe/Berlin.
Jika gambar dan video tidak diperlukan, anda boleh menyekat permintaan tersebut dengan page.route untuk menjimatkan bandwidth dan masa. Shared plan dengan bandwidth bulanan yang terhad sangat membantu.
- Tetapkan locale dan timezoneId mengikut negara IP
- Satu konteks, satu akun, satu IP
- Sekat permintaan gambar/video tidak perlu dengan page.route
- SOCKS5 menggunakan pengesahan IP, nama pengguna dan kata laluan untuk port HTTP
Bagaimana cara menerima senarai secara automatik dan menggunakannya untuk setiap tugas?
GET /proxies API mengembalikan IP, port, dan negara untuk setiap baris dalam JSON. Dengan menambah syarat negara, anda boleh membuat senarai yang sesuai untuk tugas setiap negara. Kod di bawah adalah contoh untuk menerima hanya proksi Amerika dan membuat konteks mengikut bilangan tugas. Nama medan respons boleh disemak dalam dokumen API.
Jika anda mempunyai banyak tugas, jangan biarkan konteks terbuka terlalu lama. Tutup setiap kali tugas selesai untuk mengembalikan memori.
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();Bagaimana mengurangkan penggunaan bandwidth dengan menyekat permintaan tidak perlu?
Menyekat permintaan imej, fon, dan video dengan page.route atau context.route mempercepatkan pembukaan halaman dan menjimatkan lebar jalur proksi. Ini sangat berkesan untuk tugas pengumpulan data sahaja.
await context.route("**/*", (route) => {
const type = route.request().resourceType();
return ["image", "font", "media"].includes(type) ? route.abort() : route.continue();
});Apakah Firefox dan WebKit menggunakan proxy yang sama?
Ya. Playwright menerima opsi proxy yang sama untuk ketiga browser. Tim pengujian dapat membuka Chromium, Firefox, dan WebKit secara bergantian dengan proxy yang sama untuk memeriksa apakah tampilan per negara konsisten di semua browser.
Firefox tidak mendukung autentikasi username dan password SOCKS5 di browser, sama seperti Chromium, jadi hubungkan SOCKS5 dengan IP authorization. Port HTTP terhubung dengan username dan password di ketiga browser.
Jika anda menggunakan Playwright Test, anda boleh memasukkan proxy dalam item use playwright.config untuk digunakan dalam semua ujian, atau membahagikan projek mengikut negara dan memberikan proxy yang berbeza untuk setiap satu.
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" } } },
],
});Bagaimana cara menyelesaikan kesalahan yang sering terjadi?
net::ERR_PROXY_CONNECTION_FAILED bermaksud alamat server atau port salah. Untuk ralat 407 atau berkaitan pengesahan, semak nilai username dan password. Ralat 'Browser does not support socks5 proxy authentication' muncul apabila menggunakan nama pengguna dan kata laluan dengan SOCKS5. Tukar kepada pengesahan IP atau gunakan port HTTP.