browsermobproxy代理抓取UI頁面介面HTTP請求
阿新 • • 發佈:2018-12-22
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()