如何在Python上使用selenium webdriver和browsermob代理捕获网络流量?

时间:2015-01-27 11:17:11

标签: python selenium selenium-webdriver python-requests browsermob

我想在Python上使用Selenium Webdriver来捕获网络流量。因此,我必须使用代理(如BrowserMobProxy)

当我使用webdriver.Chrome时:

from browsermobproxy import Server

server = Server("~/browsermob-proxy")

server.start()
proxy = server.create_proxy()

from selenium import webdriver
co = webdriver.ChromeOptions()
co.add_argument('--proxy-server={host}:{port}'.format(host='localhost', port=proxy.port))

driver = webdriver.Chrome(executable_path = "~/chromedriver", chrome_options=co)

proxy.new_har
driver.get(url)
proxy.har # returns a HAR 

for ent in proxy.har['log']['entries']:
    print ent['request']['url']

正确加载网页,所有请求均可在HAR文件中访问和访问。 但是当我使用webdriver.Firefox时:

# The same as above
# ...
from selenium import webdriver
profile  = webdriver.FirefoxProfile()
driver = webdriver.Firefox(firefox_profile=profile, proxy = proxy.selenium_proxy())

proxy.new_har
driver.get(url)
proxy.har # returns a HAR

for ent in proxy.har['log']['entries']:
    print ent['request']['url']

无法正确加载网页,且HAR文件中的请求数小于应该的请求数。

您是否知道第二个代码中代理设置的问题是什么?我应该如何修复它以正确使用webdriver.Firefox?

3 个答案:

答案 0 :(得分:5)

偶然发现了这个项目https://github.com/derekargueta/selenium-profiler。吐出URL的所有网络数据。不应该很难入侵并融入您正在运行的任何测试中。

原始来源:https://www.openhub.net/p/selenium-profiler

答案 1 :(得分:0)

对我来说,以下代码组件工作正常。

profile = webdriver.FirefoxProfile()
profile.set_proxy(proxy.selenium_proxy())
driver = webdriver.Firefox(firefox_profile=profile)

答案 2 :(得分:0)

curl https://192.168.64.11:8443/api/v1/namespaces/my-namespace/pods --
cert ~/.minikube/apiserver.crt --key ~/.minikube/apiserver.key --cacert 
~/.minikube/ca.crt