2016-04-20 51 views
5

Chcę przechwycić ruch do stron, które przeglądam, aby używać Selenium z pythonem, a ponieważ ruch będzie https przy użyciu proxy nie dostanie mnie daleko.Przechwytywanie sieci za pomocą Selenium/PhantomJS

Mój pomysł polegał na uruchomieniu phantomJS z selenem i użyciu phantomJS do wykonania skryptu (nie na stronie za pomocą webdriver.execute_script(), ale na samym phantomJS). Myślałem o skrypcie netlog.js (stąd tutaj https://github.com/ariya/phantomjs/blob/master/examples/netlog.js).

Ponieważ działa jak to w wierszu poleceń

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

musi istnieć podobny sposób to zrobić z selen?

góry dzięki

Aktualizacja:

rozwiązać go z browsermob-proxy.

pip3 install browsermob-proxy 

kod Python3

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

Ponadto aby zainstalować bibliotekę Pythona z 'pip', również musisz pobrać najnowszą wersję bmp z' https: // github.com/lightbody/browsermob-proxy/releases' i zainstalować środowisko uruchomieniowe java 'apt-get install default- jre'.' <ścieżka do brwi ermob-proxy> 'jest wtedy ustawione na ścieżkę, którą pobrałeś bmp do. – isedwards

Odpowiedz

5

Używam serwera proxy dla tego

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']] 

do 'har' (http archiwum formatu) ma wiele innych informacji na temat żądań i odpowiedzi , jest to bardzo przydatne dla mnie

instalowanie w systemie Linux:

pip install browsermob-proxy 
+0

Dzięki, to też się stało. Jednak w przypadku Python3 należy zmienić kod i parametr phantomJS. Zaktualizowałem go w moim poście. – Bart

+0

używane 'driver = webdriver.Chrome (service_args = service_args)' zamiast niego i działało jak urok – Indra

1

Używam do tego rozwiązania bez serwera proxy. Zmodyfikowałem kod źródłowy selenu zgodnie z poniższym linkiem, aby dodać funkcję executePhantomJS.

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

Potem wykonać następujący skrypt po uzyskaniu sterownik phantomJS:

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() 

Wtedy wszystkie żądania są rejestrowane w konsoli (zwykle plików ghostdriver.log)

Powiązane problemy