2014-07-01 2 views
6

Sto provando a verificare il comportamento di una pagina web su richieste di diversi referrer. Sto facendo il seguente finoraPhantomjs tramite selenio in python

webdriver.DesiredCapabilities.PHANTOMJS['phantomjs.page.customHeaders.referer'] = referer 

Il problema è che la pagina web ha richieste Ajax che cambieranno alcune cose nel codice HTML, e quelle richieste Ajax dovrebbe avere come referer la pagina web e non il referer ho dato a la partenza. Sembra che il referente sia impostato una volta all'inizio e ogni richiesta successiva sia ajax o immagine o ancora prende lo stesso referente e non cambia mai indipendentemente dalla profondità della navigazione, c'è una soluzione per scegliere il referer solo per la prima richiesta e averlo dinamico per il resto?

Dopo qualche ricerca ho trovato this e ho cercato di raggiungere attraverso il selenio, ma non ho avuto alcun successo ancora con questo:

webdriver.DesiredCapabilities.PHANTOMJS['phantomjs.page.onInitialized'] = """function() {page.customHeaders = {};};""" 

Tutte le idee?

+0

Qualsiasi fortuna Evan? Ho lo stesso problema. – norbertpy

+1

@norbertpy Ehi, scusa per il ritardo. No, non ho gestito questo tramite Python come ricordo. Ho dovuto creare uno script js e durante l'avvio della richiesta con un referrer set ho usato un evento chiamato "oncomplete" (o qualcosa di simile) per reimpostare il riferimento su una stringa vuota e questo ha funzionato. Se hai bisogno degli script veri fammi sapere. – Evan

+1

@norbertpy La risposta qui sotto è arrivata troppo tardi per me, ma sembra che funzionerebbe. Puoi provarlo se vuoi mantenere tutto (ish) all'interno di python. – Evan

risposta

2

Da quello che posso dire è necessario applicare PhantomJS per ottenere questo risultato.

PhantomJS contiene un modulo chiamato GhostDriver che fornisce l'API HTTP che WebDriver utilizza per comunicare con l'istanza di PhantomJS. Quindi tutto ciò che vuoi fare tramite WebDriver deve essere supportato da GhostDriver, ma non sembra che onInitialized sia supportato da GhostDriver.

Se ti senti avventuroso, puoi clonare lo PhantomJS repository e applicare il patch al file src/ghostdriver/session.js per fare ciò che desideri.

Il metodo _init assomiglia a questo:

_init = function() { 
    var page; 

    // Ensure a Current Window is available, if it's found to be `null` 
    if (_currentWindowHandle === null) { 
     // Create the first Window/Page 
     page = require("webpage").create(); 
     // Decorate it with listeners and helpers 
     page = _decorateNewWindow(page); 
     // set session-specific CookieJar 
     page.cookieJar = _cookieJar; 
     // Make the new Window, the Current Window 
     _currentWindowHandle = page.windowHandle; 
     // Store by WindowHandle 
     _windows[_currentWindowHandle] = page; 
    } 
}, 

Si potrebbe provare a utilizzare il codice che avete trovato:

page.onInitialized = function() { 
    page.customHeaders = {}; 
}; 

sull'oggetto page creato lì.

A seconda di ciò che si prova, si potrebbe essere in grado di risparmiare un sacco di sforzi e di abbandonare il browser e testare direttamente le richieste HTTP usando qualcosa come il modulo requests.