Selenium ve Playwright ile Mobil Proxy
Kimlik doğrulamalı bir mobil proxy üzerinden gerçek bir tarayıcıyı çalıştırmak — Playwright’ın bağlam başına proxy’si, kullanıcılara bir öğleden sonrayı harcatacak Chrome kimlik bilgisi tuzağı ve 407 hatasını tahmin etmek yerine nasıl yorumlayacağınız.
- Playwright'ta birinci sınıf kimlik doğrulama — kullanıcı adı ve şifre, geçici bir çözüm değil, doğrudan parametrelerdir.
- IP izin listesi — Selenium’un sabit bir ana bilgisayardan çalıştırıldığı durumlarda en güvenilir seçenek.
- Bağlam başına çıkış IP'leri — bir tarayıcı sürecinde birbiriyle etkileşime girmeden birden fazla kimlik çalıştırın.
- Gerçek operatör IP'leri — gerçek bir mobil ağ tarafından desteklenen bir mobil parmak izi.
Gerçek bir mobil çıkış IP adresiyle desteklenen bir mobil görüntüleme alanı ve yerel ayar.
Bir işlemde, adreslerini paylaşmadan paralel kimlikler çalıştırın.
Gerçek bir tarayıcıyı yalnızca verilerin tarayıcı olmadan elde edilemediği durumlarda kullanın. İşaretleme ilk yanıtta geliyorsa, bir HTTP istemcisi on kat daha verimlidir — bu yol Python kılavuzunda ele alınmıştır. Aşağıda anlatılanlar, JavaScript’in çalıştırılması gereken ve proxy’nin tarayıcıyla etkileşime girmesi gereken durumlar içindir.
| Araç | Yerel proxy kimlik doğrulaması | Bağlam başına vekil | Sonuç |
|---|---|---|---|
| Playwright | Evet — kullanıcı adı ve şifre, parametrelerdir | Evet | Proxy sunucularının kimlik bilgilerine ihtiyaç duyduğu durumlarda varsayılan seçim |
| Selenium | Hayır — URL’deki kimlik bilgileri göz ardı edilir | Hayır — her sürücü örneği için yalnızca bir vekil | IP izin listesi kullanıldığında sorunsuz çalışır; aksi takdirde kullanımı zor olur |
| Puppeteer | Kısmen — page.authenticate() aracılığıyla | Bağlam başına değil, tarayıcı başına | Halihazırda bunu kullanan Node yığınları için sorun yok |
Oyun yazarı: Başlangıçta vekil, bağlama göre vekil
Playwright, vekil kimlik bilgilerini birinci sınıf argümanlar olarak kabul eder ve kimlik doğrulama işlemini kendisi gerçekleştirir. Yüklenecek bir uzantı ya da eklenecek bir başlık yoktur:
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(proxy={
"server": "http://proxy.pxm2.io:8000",
"username": "user",
"password": "pass",
})
ctx = browser.new_context(
locale="en-GB",
timezone_id="Europe/London",
viewport={"width": 390, "height": 844},
is_mobile=True,
)
page = ctx.new_page()
page.goto("https://example.com/listings", wait_until="domcontentloaded")
page.wait_for_selector(".result-card")
html = page.content()
browser.close()
Tek bir işlemde birden fazla kimlik çalıştırıyorsanız, proxy ayarlarını tarayıcı başına değil bağlam başına yapın — `new_context`, aynı proxy sözlüğünü kabul eder; böylece her bağlam kendi çıkış IP’sine, kendi çerez deposuna ve kendi depolama alanına sahip olur ve bunlar arasında herhangi bir çapraz bulaşma olmaz. Aynı bağlam içindeki sekmeler tek bir ağ yığını paylaşır; bu nedenle, ayrı kimliklere ihtiyacınız varsa ayrı sekmeler değil, ayrı bağlamlar oluşturmanız gerekir.
Bu kod parçasındaki bağlam seçeneklerinin ikinci bir işlev gördüğüne dikkat edin. `is_mobile` ayarı yapılmış bir mobil görüntüleme alanı, bir yerel ayar ve bir saat dilimi sadece süsleme değildir — bunlar, ağ tarafı mobil çıkış IP’si olan bir iddianın tarayıcı tarafını oluşturur. Birini doğru, diğerini yanlış yapmak, ikisini de yanlış yapmaktan daha kötüdür; çünkü bu uyumsuzluk başlı başına bir işarettir.
Selenium ve Kimlik Doğrulamalı Proxy Tuzağı
Selenium daha eski bir seçenektir ve kullanmaya karar vermeden önce bilmeniz gereken önemli bir püf noktası vardır: Chrome’un --proxy-server anahtarı kullanıcı adı ve şifre kabul etmez. Bunların URL’ye eklenmesi sessizce göz ardı edilir ve tarayıcı, WebDriver’ın kapatamadığı yerel bir kimlik doğrulama iletişim kutusunda takılı kalır. Bunun sonucu, hiçbir hata mesajı vermeden ilk gezinme sırasında takılan bir komut dosyasıdır.
from selenium import webdriver
opts = webdriver.ChromeOptions()
opts.add_argument("--proxy-server=http://proxy.pxm2.io:8000")
# NOTE: user:pass in the URL above is IGNORED by Chrome.
# Pick one of:
# 1. IP authorisation - allow-list your server IP, use no credentials
# 2. selenium-wire-lw - injects the Proxy-Authorization header
# 3. a small MV3 extension that answers onAuthRequired
driver = webdriver.Chrome(options=opts)
driver.get("https://example.com/listings")
Kazıyıcınız sabit bir ana bilgisayardan çalıştırıldığında, IP yetkilendirmesi bu üç yöntem arasında en az riskli olanıdır. Hiçbir kimlik bilgisi aktarılmaz, hiçbir şey enjekte edilmesine gerek kalmaz ve aktif tutulması gereken ek bir bağımlılık da yoktur.
Selenium Wire’ı kullanmayı düşünüyorsanız, hangi paketi yüklediğinizi kontrol edin. Orijinal wkeeling/selenium-wire deposu Ocak 2024’te arşivlendi ve artık güncellenmiyor; sabitlenmiş kurulumlar çalışmaya devam ediyor, ancak bağımlılıklar güncellendikçe yeni ortamlarda sorunlar yaşanabiliyor. Güncel tutulan selenium-wire-lw çatalı, aynı seleniumwire içe aktarmalarını korur ve yeni çalışmalar için kullanılması gereken sürüm budur.
Eğer Selenium’u esas olarak alışkanlıktan kullanıyorsanız ve kimlik doğrulamalı proxy’lere ihtiyacınız varsa, Playwright bu sorunu tamamen ortadan kaldırır — ve bu, üç geçici çözümden herhangi birinden daha kalıcı bir çözümdür.
407 Hatalarının ve Proxy Kimlik Doğrulama Hatalarının Giderilmesi
“407 Proxy Authentication Required” hatası, proxy sunucusunun isteğinizi aldığını ancak kimliğinizi doğrulayamadığı için reddettiği anlamına gelir. Tarayıcı otomasyonunda bu hata, kimlik bilgilerinin yanlış olmasından ziyade, neredeyse her zaman bu bilgilerin hiç ulaşmamış olması nedeniyle ortaya çıkar. Aşağıdaki sırayla adımları uygulayın; genellikle ilk iki adımda sorunun nedenini bulabilirsiniz:
- Öncelikle kimlik doğrulaması yapılmamış shape'i çalışır hale getirin
IP adresinizi geçici olarak izin listesine ekleyin veya kimlik bilgisi gerektirmeyen bir uç noktayı kullanın ve tarayıcının hedefe ulaşabildiğini doğrulayın. Bu, bir proxy sorununu tarayıcı yapılandırma sorunundan ayırır; bu iki sorunun hata ayıklama süreçleri birbirinden çok farklıdır.
- Başlıyken koş, başsız kalmadan önce
Yerel kimlik doğrulama iletişim kutusu, başlıksız modda görünmezken gerçek bir pencerede açıkça görülür. Başlıklı çalıştırmada kimlik bilgileri sorulursa, sorunu bulmuşsunuz demektir — bu, Chrome’un size anahtarın kullanıcı adınızı ve şifrenizi hiçbir zaman aktarmadığını bildirmesidir.
- Aynı tarayıcıdan çıkış IP adresini doğrulayın
Bir IP-echo hizmetine gidin ve adresi okuyun. Eğer bu adres size aitse, proxy ayarı tamamen göz ardı ediliyor demektir — bu, hatalı biçimlendirilmiş uç nokta dizesinin sık görülen bir sonucudur; zira çoğu yığın, hata sinyali vermek yerine “açık” modda çalışmaya devam eder.
- Ancak o zaman, ve ancak o zaman, kimlik doğrulamayı ekleyin
Hedefe giden, hatasız olduğu bilinen bir yol varken, kimlik doğrulama hatasının artık dört yerine tam olarak tek bir olası nedeni vardır.
Kimlik bilgilerinin hatalı olduğunu varsaymadan önce kontrol etmeniz gereken bir şey daha var: Çalıştığınız sunucunun, sağlayıcının izin listesinde yer alıp almadığı. Yer değiştiren bir sunucu ya da yeni bir adresle devreye giren bir konteyner, yanlış yazılmış bir şifreyle tamamen aynı 407 hatasını verir.
Başlıksız Sızıntı: Tarayıcıyı IP Adresiyle Eşleştirme
Temiz bir Mobil IP ile varsayılan başlıksız tarayıcının bir araya gelmesi hâlâ bariz bir bot olduğunu gösterir. Proxy, birkaç katmandan oluşan bir puanın sadece bir katmanını ele alır ve işte dokunmadığı katmanlar şunlardır:
- Otomasyon işaretleri — navigator.webdriver, eksik eklenti ve kodek göstergeleri ile SwiftShader olarak görünen bir WebGL işleyicisi, hepsi bir otomatik tarayıcıya işaret eder. Headful’u sanal bir ekran altında çalıştırın ya da gizli bir eklenti kullanın ve varsayımda bulunmak yerine parmak izi test sayfası üzerinden doğrulama yapın.
- Coğrafi tutarlılık — Birleşik Krallık çıkış IP adresi ile Amerika/New_York ve en-US değerlerini bildiren bir tarayıcının eşleşmemesi, rutin olarak kontrol edilen bir durumdur. Çıkış yaptığınız ülkeyle uyumlu olacak şekilde bağlamdaki locale ve timezone_id değerlerini ayarlayın.
- Cihaz tutarlılığı — Bir telefon görüntü alanı ve is_mobile ayarları belirlediyseniz, çıkış IP’si bir mobil IP olmalı ve User-Agent da her ikisiyle uyumlu olmalıdır. Yarım bir mobil kimlik, hiç olmamaktan daha dikkat çekicidir.
- Davranış — Mükemmel derecede eşit aralıklar, fare hareketinin olmaması ve anında form doldurma işlemleri ölçülür. Hiçbir vekil, erişim modelini gizlemez; bunu yalnızca modelin değiştirilmesi sağlar.
Başka bir kaçınma katmanı eklemeden önce, ağ sekmesini açın. Tarayıcının tamamını kullanarak görüntülemeye çalıştığınız sayfa, verilerini genellikle temiz bir JSON döndüren dahili bir uç noktadan alır — bu uç noktaya, tarayıcıya ve parmak izi bırakmaya hiç gerek kalmadan, doğrudan bir HTTP istemcisiyle erişebilirsiniz.
Özel Bir Tarayıcı Proxy'si Alın
Canlı PXM2 konumları — hedef kitlenizin isteğin hangi ülkeden geldiğini göreceğini seçin ve sınırsız bant genişliği ile rotasyon özelliğine sahip özel bir 4G/5G IP adresi edinin:
Amerika Birleşik Devletleri
Birleşik Krallık
Fransa
Sık Sorulan Sorular
Selenium ile kimlik doğrulamalı bir proxy'yi nasıl kullanabilirim?
Not through the command line — Chrome’s --proxy-server switch ignores a username and password in the URL, and the browser then blocks on a native dialog WebDriver cannot dismiss. The three working options are allow-listing your host’s IP so no credentials are needed, using a maintained Selenium Wire fork to inject the Proxy-Authorization header, or loading a small extension that answers onAuthRequired.
Playwright, proxy kimlik doğrulamasını destekliyor mu?
Evet, doğrudan. Hem launch hem de new_context, server, username ve password anahtarlarını içeren bir proxy sözlüğü kabul eder ve Playwright, kimlik doğrulama işlemini kendisi halleder. Proxy’lerinizde kimlik bilgileri gerekiyorsa, Selenium yerine Playwright’ı tercih etmenin en açık nedeni budur.
"407 Proxy Kimlik Doğrulaması Gerekli" ne anlama gelir?
Proxy, isteğinizi aldı ancak kimliğinizi doğrulayamadığı için reddetti. Tarayıcı otomasyonunda bu durum, kimlik bilgilerinin yanlış olmasından ziyade, neredeyse her zaman proxy’ye ulaşmamış olması anlamına gelir — örneğin, fark edilmeden devre dışı bırakılmış bir anahtar, yüklenmemiş bir uzantı veya izin listesinde yer almayan bir ana bilgisayar gibi.
Selenium-wire hâlâ güncel tutuluyor mu?
The original wkeeling/selenium-wire repository was archived in January 2024 and has not been maintained since. Pinned installations keep working, but fresh environments tend to break as dependencies move on. For new projects use the maintained selenium-wire-lw fork, which keeps the same seleniumwire imports, or avoid the problem entirely by allow-listing your IP or moving to Playwright.
Tarayıcı sekmesi veya bağlam başına farklı bir proxy kullanabilir miyim?
Bağlam bazında, evet — Playwright’ın `new_context` yöntemi kendi proxy’sini kullanır; bu sayede her bağlam, birbirleriyle herhangi bir veri sızıntısı olmadan ayrı bir çıkış IP’si, çerez deposu ve depolama alanına sahip olur. Tek bir bağlam içindeki sekmeler bazında ise hayır: Bir bağlamdaki sekmeler ağ yığınını paylaşır. Ayrı kimliklere ihtiyacınız varsa, ayrı bağlamlar kullanın.
İlgili Mobil Proxy Kılavuzları
Tarayıcı otomasyonu, maliyetli bir yöntemdir. Bu yazı dizisinin geri kalanında ise daha ucuz yöntemler ve öncelikle bir proxy katmanının nasıl seçileceği ele alınmaktadır.
Web veri toplama kılavuzları
Temel mobil proxy kılavuzları
Gerçek bir İSS’nin IP adresinden gerçek bir tarayıcıyı çalıştırın
IP izin listesi veya kullanıcı kimlik bilgileri ile çalışan özel 4G/5G modemler — her tarayıcı bağlamı için ayrı bir çıkış IP’si ve sayfanın ne kadar yüklenirse yüklensin sınırsız bant genişliği.
Bir Tarayıcı Proxy'si Edinin