2016-04-20 3 views
5

Я хочу захватить трафик на сайты, которые я просматриваю, чтобы использовать Selenium с python, и поскольку трафик будет https с использованием прокси-сервера, он не заберет меня далеко.Съемка сети с помощью Selenium/PhantomJS

Моя идея состояла в том, чтобы запустить phantomJS с селеном и использовать phantomJS для выполнения скрипта (не на странице с использованием webdriver.execute_script(), а на самом phantomJS). Я думал о сценарии netlog.js (отсюда https://github.com/ariya/phantomjs/blob/master/examples/netlog.js).

Поскольку он работает, как это в командной строке

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

должен быть подобный способ сделать это с селеном?

Заранее спасибо

Update:

решаемые его browsermob-прокси.

pip3 install browsermob-proxy 

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

Кроме того для установки библиотеки python с помощью 'pip', также необходимо загрузить последнюю версию bmp из' https: // github.com/lightbody/browsermob-proxy/releases' и установить среду выполнения java 'apt-get install default- jre'.' <путь к брови ermob-proxy> 'затем устанавливается путь, к которому вы загрузили bmp. – isedwards

ответ

5

Я использую прокси-сервер для этого

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

в 'хар' (формат HTTP-архив) имеет много другой информации о запросах и ответах , это очень полезно для меня

установка на Linux:

pip install browsermob-proxy 
+0

Спасибо, что сделал это. Хотя для Python3 вам нужно изменить код и параметр phantomJS. Обновил его в моем посте. – Bart

+0

использовал 'driver = webdriver.Chrome (service_args = service_args)' вместо этого, и он работал как шарм – Indra

1

Для этого я использую решение без прокси-сервера. Я изменил исходный код селена в соответствии со ссылкой ниже, чтобы добавить функцию executePhantomJS.

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

Затем я выполнить следующий скрипт после получения драйвера 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() 

Тогда все запросы регистрируются в консоли (обычно ghostdriver.log файл)

Смежные вопросы