Selenium ile Mevcut Tarayıcı Oturumunu Kullanarak API İstekleri Göndermek

Test ortamlarına girdiğinizde bazen REST endpoint’leri kapalı olur, CORS engelleri başınızı ağrıtır; halbuki tarayıcıda oturum açtınız ve elinizde geçerli çerezler, localStorage verileri duruyor. İşte bu noktada Selenium’u sadece sayfa gezdirme aracı olarak değil, “arka plandaki” API çağrılarını tetiklemek için de kullanabilirsiniz. Hem bu sayede otomatikleştirilmiş Güvenlik testlerini 3.parti uygulama kullanmadan da sağlayabilirsiniz. Ben iki yolu tercih ediyorum ve genelde hangisi en kolaysa ona dönüyorum.

Tarayıcı içinden fetch ile doğrudan istek atmak
Tarayıcı konsolunda çalışan kodu Selenium’a enjekte etmek, ekstra Python kütüphanesi yükleme derdini ortadan kaldırıyor ve CORS sorununu “aynı origin” avantajıyla pas geçmenizi sağlıyor. Örneğin login’li bir sayfada şöyle bir kod çalıştırabilirsiniz:

result = driver.execute_async_script(“””
const callback = arguments[arguments.length – 1];

fetch(‘/api/data?filter=foo’, {
method: ‘GET’,
credentials: ‘same-origin’
})
.then(res => res.json().then(data => callback({ status: res.status, data })))
.catch(err => callback({ error: err.toString() }));
“””)
print(result)

Bu yöntemle tarayıcıdaki tüm cookie’ler, storage’daki token’lar vs. otomatik taşınıyor. Sonuçta size hem HTTP durum kodunu hem gelen JSON’u bir Python objesi olarak dönüyor.

Selenium çerezlerini requests ile kullanmak
Bazen Python’un requests kütüphanesinin retry, timeout veya logging özelliklerinden yararlanmak isteyebilirsiniz. Bu durumda Selenium’dan aldığınız çerezleri bir requests.Session()’a şöyle aktarıyorsunuz:

session = requests.Session()
for c in driver.get_cookies():
session.cookies.set(c[‘name’], c[‘value’], domain=c[‘domain’])

# İsterseniz header’ları da eşitleyin
ua = driver.execute_script(“return navigator.userAgent;”)
session.headers.update({
“User-Agent”: ua,
“Accept”: “application/json”
})

resp = session.post(“https://example.com/api/submit”, json={“foo”: “bar”})
print(resp.status_code, resp.json())

Bu sayede hem cookie’ler hem de User-Agent gibi header’lar “gerçek” tarayıcı oturumunuzdan kopyalanmış gibi gidiyor ve API’nin sizi tanıması garanti.