Ich versuche derzeit, BrowserMob Proxy (v2.1.1) + Selenium (v2.5.3) für Python (v2.6) zu verwenden, um Seitenladezeiten zu testen und sie in HAR-Dateien auszugeben. Ich muss sowohl Chrome als auch IE testen. Ich habe derzeit funktioniert es perfekt für Chrome und es läuft ohne Fehler auf IE, aber es erfasst nicht die richtigen Daten in die HAR-Datei.Python BrowserMob Proxy mit IE erfasst falsche HAR?
Dieses Bild ist ein Vergleich der zwei verschiedenen HAR-Dateien, die ich bekomme. Der erste ist das Ergebnis von IE und der zweite ist das Ergebnis von Chrome. Ich muss für beide dasselbe bekommen. Ich habe das Gefühl, dass ich etwas falsch mache mit der Art und Weise, wie ich den Proxy einrichte, aber laut http://www.seleniumhq.org/docs/04_webdriver_advanced.jsp sollte es im Grunde für Chrome/IE genauso sein wie ich es habe. Meine Gedanken sind, dass es nicht mit dem richtigen Proxy-Port oder so etwas, aber ich weiß nicht, wie es zu beheben
Wie Sie sehen können, wie es scheint auch zu erfassen, was Selen auf das tun Seite, die nicht das ist, was ich will. Dies ist der Code ich verwende:
class SeleniumObject:
def __init__(self):
# Start up the server
self.server = Server(Config.BAT_PATH) #resolves to the location of browsermob-proxy-2.1.1/bin/browsermob-proxy.bat
self.server.start()
self.proxy = self.server.create_proxy()
def setupDriver(self, browser):
self.browser = browser.lower()
PROXY = self.proxy.proxy
# Chrome
if self.browser == 'chrome':
options = webdriver.ChromeOptions()
options.add_argument("--start-maximized")
desired_capabilities = webdriver.DesiredCapabilities.CHROME.copy()
# Change the proxy properties of that copy.
desired_capabilities['proxy'] = {
"httpProxy":PROXY,
"ftpProxy":PROXY,
"sslProxy":PROXY,
"noProxy":None,
"proxyType":"MANUAL",
"class":"org.openqa.selenium.Proxy",
"autodetect":False
}
self.driver = webdriver.Chrome(chrome_options=options, desired_capabilities=desired_capabilities)
# IE
if self.browser == 'ie':
desired_capabilities = webdriver.DesiredCapabilities.HTMLUNITWITHJS.copy()
desired_capabilities['proxy'] = {
"httpProxy":PROXY,
"ftpProxy":PROXY,
"sslProxy":PROXY,
"noProxy":None,
"proxyType":"MANUAL",
"class":"org.openqa.selenium.Proxy",
"autodetect":False
}
self.driver = webdriver.Ie(capabilities=desired_capabilities)
def outputHAR(self):
# Output the data as a HAR file
self.har_json = json.dumps(self.proxy.har, indent=4, sort_keys=True) # returns a HAR JSON blob
open(self.browser + '-load-summary-' + self.sample_time + '.har', 'w').write(self.har_json)
def setSampleTime(self):
self.sample_time = datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
def shutDown(self):
self.setRegKey("ProxyEnable", 0) # Forces the internet setting to stop using the proxy in case there was an error
self.driver.quit()
self.proxy.close()
self.server.stop()
selenium = SeleniumObject()
selenium.setupDriver("chrome")
selenium.setSampleTime()
selenium.proxy.new_har("W3Schools")
selenium.driver.get("http://www.w3schools.com")
selenium.outputHAR()
selenium.shutDown()
print "Done!"
Dies löste es. Vielen Dank; Es fing an, mir Kopfschmerzen zu bereiten. Aus Neugier, löscht der Chrome-Treiber den Cache automatisch und deshalb war das kein Problem mit Chrome? –
Der Chrome-Treiber erstellt bei jedem Start ein temporäres Profil und startet daher immer mit einer sauberen Sitzung. –
Ahh, das macht jetzt viel mehr Sinn. Danke für die Hilfe! –