2011-12-02 1 views
2

Je capture le trafic réseau sur les objets Selenium sur les demandes de publication HTTP que je suis en train de faire. Bien que la chaîne JSON renvoyée ait les en-têtes de demande, le corps (params) du message de message n'est jamais capturé.Capture du trafic dans Selenium

Heres mon code,

host = "localhost" 
port = "4444" 
browser = r"*pifirefox" 
sel = selenium(host, port, browser, url) 
. 
. 
.....Submit action 
postRequest = sel.captureNetworkTraffic('json') 

postRequest a,

[{ 
    "statusCode":200, 
    "method":"POST", 
    "url":"http://.................", 
    "bytes":97567, 
    "start":"2011-12-02T17:42:04.719-0500", 
    "end":"2011-12-02T17:42:05.044-0500", 
    "timeInMillis":325, 
    "requestHeaders":[{ 
     "name":"Host", 
     "value":"......................." 
    },{ 
     "name":"User-Agent", 
     "value":"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:7.0.1) Gecko/20100101 Firefox/7.0.1" 
    },{ 
     "name":"Accept", 
     "value":"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" 
    },{ 
     "name":"Accept-Language", 
     "value":"en-us,en;q=0.5" 
    },{ 
     "name":"Accept-Encoding", 
     "value":"gzip, deflate" 
    },{ 
     "name":"Accept-Charset", 
     "value":"ISO-8859-1,utf-8;q=0.7,*;q=0.7" 
    },{ 
     "name":"Proxy-Connection", 
     "value":"keep-alive" 
    },{ 
     "name":"Referer", 
     "value":"...................." 
    },{ 
     "name":"Cookie", 
     "value":"...................." 
    },{ 
     "name":"X-Requested-With", 
     "value":"XMLHttpRequest" 
    },{ 
     "name":"X-MicrosoftAjax", 
     "value":"Delta=true" 
    },{ 
     "name":"Cache-Control", 
     "value":"no-cache, no-cache" 
    },{ 
     "name":"Content-Type", 
     "value":"application/x-www-form-urlencoded; charset=utf-8" 
    },{ 
     "name":"Content-Length", 
     "value":"10734" 
    },{ 
     "name":"Pragma", 
     "value":"no-cache" 
    }], 
    "responseHeaders":[{ 
     "name":"Date", 
     "value":"Fri, 02 Dec 2011 22:42:05 GMT" 
    },{ 
     "name":"Server", 
     "value":"Microsoft-IIS/6.0" 
    },{ 
     "name":"Cache-Control", 
     "value":"private" 
    },{ 
     "name":"Content-Type", 
     "value":"text/plain; charset=utf-8" 
    },{ 
     "name":"Content-Length", 
     "value":"97567" 
    },{ 
     "name":"X-Powered-By", 
     "value":"ASP.NET" 
    },{ 
     "name":"Via", 
     "value":"1.1 (jetty)" 
    },{ 
     "name":"X-AspNet-Version", 
     "value":"4.0.30319" 
    }] 
}] 

Je suis en train d'imiter la demande Post, mais sans le corps (params), son incomplète. Toutes les suggestions seraient grandement appréciées.

Cheers, A

Répondre

1

Vous ne pouvez pas obtenir la demande ou le corps de réponse avec Sélénium - il ne capture que les en-têtes. Essayez Fiddler2 si vous utilisez Windows.

+0

merci, va vérifier Fiddler2, bien que le site serait hébergé sur unix – konkani

+0

Fiddler fonctionne sur l'ordinateur client, et je vois votre chaîne User-Agent dit que votre client est sur Windows, donc vous devriez être OK –

0

Note: J'ai peut-être besoin de plus d'informations sur ce que vous essayez d'accomplir et pourquoi vous avez choisi le sélénium. La seule chose à laquelle je peux penser est la sortie de tshark ou quelque chose de similaire dans votre programme python. Je suppose qu'il y a aussi des lecteurs pcap, mais je n'ai aucune expérience avec ceux-ci. J'ai brièvement cherché un api de surveillance de réseau de python, mais n'ai pas eu une telle chance.

+0

merci, je suis scrappant des sites avec des éléments AJAX et Javascript activés, d'où Selenium.Egalement besoin d'imiter une demande de publication sur les sites cibles pour se connecter en profondeur à l'une de leurs pages.Pour cela était rampant en utilisant Selenium, capturer le Pos t demande sur la page cible, puis avec httplib créer la même demande à partir de mon site. Par exemple, sur kayak.com, à partir des résultats de recherche, une fois que vous faites une sélection, il saute à la page de paiement du site de la compagnie aérienne. Essayer de faire la même chose, des suggestions pour le faire? – konkani

+0

Traduisez-vous manuellement les demandes de publication que vous enregistrez sur httplib? –

+0

Par programme, essayait d'explorer puis de capturer en utilisant Selenium, mais si vous connaissez un meilleur moyen. – konkani

1

Lorsque sélénium vous donne les en-têtes de requête, ils ont l'information pour créer une requête PyCurl ou urllib qui récupère les corps de réponse. Pour moi, c'était aussi simple que d'exécuter l'expression rationnelle suivante pour extraire les URL, puis d'utiliser la courbe pour les récupérer.

urls = re.finditer('\n "url":"(.*)",', sel.captureNetworkTraffic('json')) 

une expression régulière a été utilisé depuis quelques-unes des réponses avaient intégré JSON provoquant json.loads de faire exploser :(. Il y a un certain effort supplémentaire si les paramètres sont tous dans l'en-tête de réponse au lieu de l'URL.

Questions connexes