3

目標: BrowserMob-Proxy を介して Selenium Python スクリプトを実行し、HAR ファイル キャプチャをキャプチャして出力したいと考えています。

問題: 機能する (非常に基本的な) Python スクリプト (以下を参照) があります。ただし、BrowserMob-Proxy を使用して HAR をキャプチャするように変更すると、失敗します。以下に 2 つの異なるスクリプトを示しますが、どちらも失敗しますが、理由は異なります (コード スニペットの後に詳細を示します)。

BrowserMob-Proxy 説明: 前述のとおり、0.6.0 と 2.0-beta-8 の両方を使用しています。この理由は、A) LightBody (BMP のリード デザイナー) が最近、彼の最新リリース (2.0-beta-9) が機能しないことを示し、代わりに 2.0-beta-8 を使用するようにユーザーにアドバイスし、B) 私ができることからさまざまなサイト/stackoverflow 情報を読んで分かることは、Client.py/Server.py の呼び出しには 0.6.0 (PIP 経由で取得) が使用され、サーバーの起動には 2.0-beta-8 が使用されるということです。正直なところ、これは私を混乱させます。ただし、BMP のサーバーをインポートする場合、サーバーを起動するためにバッチ (.bat) ファイルが必要です。これは 0.6.0 では提供されていませんが、2.0-beta-8 では提供されています...誰かがこの領域に光を当てることができれば混乱(以下に説明する私の問題の根源であると思われます)、それから私は最も感謝しています.

ソフトウェア仕様:

  • オペレーティング システム: Windows 7 (64x) -- VirtualBox で実行
  • ブラウザ: FireFox (32.0.2)
  • スクリプト言語: Python (2.7.8)
  • 自動 Web ブラウザ: Selenium (2.43.0) -- PIP 経由でインストール
  • BrowserMob-Proxy: 0.6.0 および 2.0-beta-8 -- 以下の説明を参照

Selenium スクリプト (このスクリプトは動作します):

"""This script utilizes Selenium to obtain the Google homepage"""
from selenium import webdriver

driver = webdriver.Firefox()       # Opens FireFox browser.
driver.get('https://google.com/')  # Gets google.com and loads page in browser.

driver.quit()                      # Closes Firefox browser

このスクリプトは正常に実行され、エラーは発生しません。これは、BMP ロジックを追加する前に機能することを示すために、説明のために提供されています。

BMP を使用したスクリプト ALPHA (動作しません):

"""Using the same functional Selenium script, produce ALPHA_HAR.har output"""
from browsermobproxy import Server
server = Server('C:\Users\Matt\Desktop\\browsermob-proxy-2.0-beta-8\\bin\\browsermob-proxy')
server.start()
proxy = server.create_proxy()

from selenium import webdriver
driver = webdriver.Firefox()           # Opens FireFox browser.

proxy.new_har("ALPHA_HAR")             # Creates a new HAR
driver.get("https://www.google.com/")  # Gets google.com and loads page in browser.
proxy.har                              # Returns a HAR JSON blob

server.stop()

このコードはスクリプトの実行に成功し、エラーは発生しません。しかし、ハード ドライブ全体を検索しても、ALPHA_HAR.har を見つけることができません。

BMP を使用したスクリプト BETA (動作しません):

"""Using the same functional Selenium script, produce BETA_HAR.har output"""
from browsermobproxy import Server
server = Server("C:\Users\Matt\Desktop\\browsermob-proxy-2.0-beta-8\\bin\\browsermob-proxy")
server.start()    
proxy = server.create_proxy()

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

proxy.new_har("BETA_HAR")             # Creates a new HAR
driver.get("https://www.google.com/") # Gets google.com and loads page in browser.
proxy.har                             # Returns a HAR JSON blob

server.stop()

このコードはhttp://browsermob-proxy-py.readthedocs.org/en/latest/から取得されました。上記のコードを実行すると、FireFox は google.com を取得しようとしますが、ページの読み込みに成功しません。最終的には、エラーが発生することなくタイムアウトします。BETA_HAR.har がハード ドライブのどこにも見つかりません。また、このブラウザーを使用して他のサイトにアクセスしようとすると、同様に読み込みに失敗することにも気付きました (これは、プロキシが適切に構成されていないことが原因であると思われます)。

4

5 に答える 5

2

私はphantomJSを使用しています.Pythonでそれを使用する方法の例を次に示します:

import browsermobproxy as mob
import json
from selenium import webdriver
BROWSERMOB_PROXY_PATH = '/usr/share/browsermob/bin/browsermob-proxy'
url = 'http://google.com'

s = mob.Server(BROWSERMOB_PROXY_PATH)
s.start()
proxy = s.create_proxy()
proxy_address = "--proxy=127.0.0.1:%s" % proxy.port
service_args = [ proxy_address, '--ignore-ssl-errors=yes', ] #so that i can do https connections
driver = webdriver.PhantomJS(service_args=service_args)
driver.set_window_size(1400, 1050)
proxy.new_har(url)
driver.get(url)
har_data = json.dumps(proxy.har, indent=4)
screenshot = driver.get_screenshot_as_png()
imgname = "google.png"
harname = "google.har"
save_img = open(imgname, 'a')
save_img.write(screenshot)
save_img.close()
save_har = open(harname, 'a')
save_har.write(har_data)
save_har.close()
driver.quit()
s.stop()
于 2015-01-15T11:46:11.967 に答える
2

これを試して:

from browsermobproxy import Server
from selenium import webdriver
import json

server = Server("path/to/browsermob-proxy")
server.start()
proxy = server.create_proxy()
profile = webdriver.FirefoxProfile()
profile.set_proxy(self.proxy.selenium_proxy())
driver = webdriver.Firefox(firefox_profile=profile)
proxy.new_har("http://stackoverflow.com", options={'captureHeaders': True})
driver.get("http://stackoverflow.com")    
result = json.dumps(proxy.har, ensure_ascii=False)
print result
proxy.stop()    
driver.quit()
于 2015-08-16T14:00:27.200 に答える
0

あなたがするとき:

proxy.har

その応答を解析する必要があります。proxy.har は JSON オブジェクトであるため、ファイルを生成する必要がある場合は、次のようにする必要があります。

myFile = open('BETA_HAR.har','w')
myFile.write( str(proxy.har) )
myFile.close()

次に、.harが見つかります

于 2015-04-15T19:49:34.410 に答える