2016-04-20 21 views
5

Ich möchte den Verkehr zu den Websites erfassen, die ich mit Selenium mit Python benutze, und da der Verkehr wird https mit einem Proxy wird mich nicht weit bringen.Netzwerkerfassung mit Selenium/PhantomJS

Meine Idee war, phantomJS mit Selen zu starten und phantomJS zu benutzen, um ein Skript auszuführen (nicht auf der Seite mit webdriver.execute_script(), sondern auf phantomJS selbst). Ich dachte an das Skript netlog.js (von hier https://github.com/ariya/phantomjs/blob/master/examples/netlog.js).

Da es so in der Kommandozeile arbeitet

phantomjs --cookies-file=/tmp/foo netlog.js https://google.com 

muss es eine ähnliche Art und Weise, dies mit Selen zu tun?

Vielen Dank im Voraus

Update:

es mit browsermob-Proxy gelöst.

pip3 install browsermob-proxy 

Python3 Code

from selenium import webdriver 
from browsermobproxy import Server 

server = Server(<path to browsermob-proxy>) 
server.start() 
proxy = server.create_proxy({'captureHeaders': True, 'captureContent': True, 'captureBinaryContent': True}) 

service_args = ["--proxy=%s" % proxy.proxy, '--ignore-ssl-errors=yes'] 
driver = webdriver.PhantomJS(service_args=service_args) 

proxy.new_har() 
driver.get('https://google.com') 
print(proxy.har) # this is the archive 
# for example: 
all_requests = [entry['request']['url'] for entry in proxy.har['log']['entries']] 
+1

Zusätzlich Um die Python-Bibliothek mit 'pip' zu installieren, müssen Sie auch die neueste Version von bmp von' https: // github.com/lightbody/browsermob-proxy/releases 'herunterladen und die Java-Laufzeitumgebung installieren. apt-get install default- jre '' 'wird dann auf den Pfad gesetzt, in den Sie bmp heruntergeladen haben. – isedwards

Antwort

5

Ich verwende einen Proxy für dieses

from selenium import webdriver 
from browsermobproxy import Server 

server = Server(environment.b_mob_proxy_path) 
server.start() 
proxy = server.create_proxy() 
service_args = ["--proxy-server=%s" % proxy.proxy] 
driver = webdriver.PhantomJS(service_args=service_args) 

proxy.new_har() 
driver.get('url_to_open') 
print proxy.har # this is the archive 
# for example: 
all_requests = [entry['request']['url'] for entry in proxy.har['log']['entries']] 

das 'har' (http Archiv-Format) hat eine Menge anderer Informationen über die Anfragen und Antworten Es ist sehr nützlich für mich

Installation unter Linux:

pip install browsermob-proxy 
+0

Danke, das hat es auch gemacht. Allerdings müssen Sie für Python3 einen Code und einen phantomJS-Parameter ändern. In meinem Post aktualisiert. – Bart

+0

verwendet 'Treiber = webdriver.Chrome (service_args = service_args)' stattdessen und es funktionierte wie Charme – Indra

1

Ich verwende dafür eine Lösung ohne Proxy-Server. Ich habe den Selen-Quellcode gemäß dem unten stehenden Link modifiziert, um die executePhantomJS-Funktion hinzuzufügen.

https://github.com/SeleniumHQ/selenium/pull/2331/files

Dann führe ich das folgende Skript nach dem PhantomJS Fahrer bekommen:

from selenium.webdriver import PhantomJS 

driver = PhantomJS() 

script = """ 
    var page = this; 
    page.onResourceRequested = function (req) { 
     console.log('requested: ' + JSON.stringify(req, undefined, 4)); 
    }; 
    page.onResourceReceived = function (res) { 
     console.log('received: ' + JSON.stringify(res, undefined, 4)); 
    }; 
""" 

driver.execute_phantomjs(script) 
driver.get("http://ariya.github.com/js/random/") 
driver.quit() 

Dann wird alle Anfragen in der Konsole angemeldet sind (in der Regel der ghostdriver.log Datei)