1. 程式人生 > >browsermobproxy代理抓取UI頁面介面HTTP請求

browsermobproxy代理抓取UI頁面介面HTTP請求

H5 UI自動化,想抓取network的介面響應,第三方庫browsermobproxy支援HTTP的抓取。文件說支援HTTPS,但實際一直報證書錯誤。實際也匯入了證書。花費了1整天的時間研究,但是並木有解決。。。記錄下這個問題吧~

#-*- coding = utf-8 -*-
import os, re
from browsermobproxy import Server
from selenium import webdriver
from uiBaseMethod import *


class Monitor(object):
    def __init__(self)
:
# 代理的存放路徑 self.PROXY_PATH = ''.join([os.getcwd(), '\\dirver\\browsermob-proxy2.1\\bin\\browsermob-proxy.bat']) # chrome的存放路徑 self.CHROME_PATH = ''.join([os.getcwd(), '\\dirver\\chromedriver.exe']) self.CHROME_OPTIONS = {"profile.managed_default_content_settings.images"
:2} def initProxy(self): self.server = Server(self.PROXY_PATH) self.server.start() self.proxy = self.server.create_proxy() #self.proxy.blacklist(["http://.*/.*.css.*","http://.*/.*.jpg.*","http://.*/.*.png.*","http://.*/.*.gif.*"],200) def initChrome(self): # 設定ssl不生效,證書安裝有問題,暫時沒解決,無法抓https的介面
# chrome_desired_capabilities = webdriver.DesiredCapabilities().FIREFOX # chrome_desired_capabilities['acceptSslCerts'] = True chrome_options = webdriver.ChromeOptions() print(self.proxy.port) chrome_options.add_argument('--proxy-server={host}:{port}'.format(host = "localhost", port = self.proxy.port)) chrome_options.add_argument('--ignore-certificate-errors') chrome_options.add_experimental_option("prefs", self.CHROME_OPTIONS) self.driver = webdriver.Chrome(executable_path = self.CHROME_PATH, chrome_options = chrome_options) # self.driver = webdriver.Chrome(executable_path = self.CHROME_PATH, chrome_options = chrome_options, desired_capabilities = chrome_desired_capabilities) def createCapture(self, name = "monitor", options={'captureContent':True}): ''' 建立一個監控:captureContent = True''' self.proxy.new_har(name, options = options) def getResponseText(self, targetUrl): if self.proxy.har['log']['entries']: for loop_record in self.proxy.har['log']['entries']: try: if re.fullmatch(targetUrl, loop_record["request"]['url']): return loop_record["response"]['content']["text"] except Exception as err: print(err) continue return None def Start(self): try: self.initProxy() self.initChrome() except Exception as err: print(err) def Quit(self): self.driver.close() self.driver.quit() try: self.proxy.close() self.server.process.terminate() self.server.process.wait() self.server.process.kill() except OSError: pass if __name__ == "__main__": monitor = Monitor() monitor.Start() monitor.createCapture() # 封裝的登入模組 login(monitor.driver, 'user_name', 'user_pwd') target_url = "http://lcts1.ssjlicai.com/userws/ws/login/v1/loginByPwd.*?" text = monitor.getResponseText(target_url) monitor.Quit()