3

我使用硒3.0.2和browsermob代理0.7.1捕獲網絡數據。我得到的只是一個空的JSON。我的代碼是:帶有硒的Browsermob代理生成空輸出

server = Server("/Users/dev/Downloads/browsermob-proxy-2.1.2/bin/browsermob-proxy") 
server.start() 
proxy = server.create_proxy() 

if browser is None: 
    profile = webdriver.FirefoxProfile() 
    profile.set_preference("browser.privatebrowsing.autostart", True) 

browser = webdriver.Firefox(firefox_profile=profile, proxy=proxy.selenium_proxy()) 
proxy.new_har("google", options={'captureHeaders': True, 'captureContent': True}) 

browser.get("https://google.com/") 

print(proxy.har) 

我得到的是這樣的空JSON

{ '登錄':{ '頁':[{ 'ID': '谷歌', '評論': '' ,'pageTimings': {'comment':''},'startedDateTime':'2016-12-01T14:23:24.984-05:00', 'title':'google'}],'entries': '','version':'1.2','creator': {'comment':'','name':'BrowserMob Proxy','version':'2.1.2'}, 'comment':' '}}

+0

我也很想知道這個問題的答案!我認爲HAR是空的,因爲代理並沒有真正被使用。 對於http(而不是https)網站,我可以通過使用以下代碼來工作: 'profile.set_proxy(proxy.selenium_proxy())' 代替傳入代理對象,但是'set_proxy'方法已棄用... 對於HTTPS,我認爲這個問題也是相關的:https://bugzilla.mozilla.org/show_bug.cgi?id = 1103196 – user3468054

+0

頁面在瀏覽器中是否成功加載?由於您收到一個空的HAR,這意味着代理已啓動,但代理沒有看到任何請求。 –

回答

0

您是否嘗試過改變

此:

server = Server("/Users/dev/Downloads/browsermob-proxy-2.1.2/bin/browsermob-proxy") 

這樣:

server = Server("/Users/dev/Downloads/browsermob-proxy-2.1.2/bin/browsermob-proxy.bat") 

您需要包括它的BrowserMob服務器路徑的結束文件擴展名(.BAT)工作:)

0

我懷疑這是由相同的GeckoDriver bug/missing featurethis question:GeckoDriver目前不支持「代理」德ChromeDriver和舊的FirefoxDriver支持。

在更新GeckoDriver/Marionette之前,您可以通過直接在Firefox配置文件上設置代理值來解決此問題。個人資料中的相關代理領域是:

  • network.proxy.http
  • network.proxy.http_port
  • network.proxy.ssl
  • network.proxy.ssl_port
  • network.proxy .type(設爲1,「手動」)

BrowserMob Proxy有a test,它顯示瞭如何在Java中執行此操作。因爲你已經有了一個firefox_profile對象,所以應該很容易將它翻譯成一個Python等價物。

0

1.Browser mob 0.7.1不支持攔截https網站。
2.從你的問題我觀察你給了https URL,嘗試使用browsermob 2.1.2及以上版本
3.在設備中安裝SSL證書要在其中攔截網絡(SSL證書在browsermob代理.zip文件中可用你下載)。
4.如果問題沒有解決告訴我,我會深入研究其他導致問題的事情。