使用Chrome QUIC协议(HTTPS)导出HAR文件

时间:2019-07-17 18:04:45

标签: python-3.x proxy selenium-chromedriver har

我正在尝试通过python使用Chrome和QUIC导出HAR文件。 使用TLS1.3的QUIC协议-因此我只能将协议与客户端证书一起使用

  • 我找到了this的答案(使用代理服务器),但是代理没有启用QUIC的客户端证书,因此所有HAR文件都是HTTP1.1协议。
  • 我找到了this代码(使用chrome配置文件设置),但是我无法使用此代码导出HAR文件。

基本上,我想将这两个代码合并为一个。 使用Chrome配置文件导出HAR文件(以启用TLS1.3,HTTPS和QUIC)

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = webdriver.ChromeOptions()
options.add_argument("user-data-dir=C:\\Users\\AtechM_03\\AppData\\Local\\Google\\Chrome\\User Data\\Default")
driver = webdriver.Chrome(executable_path=r'C:\path\to\chromedriver.exe', chrome_options=options)
driver.get("https://www.google.co.in")

from browsermobproxy import Server
from selenium import webdriver
import os
import json
import urlparse

server = Server("path/to/browsermob-proxy")
server.start()
proxy = server.create_proxy()

chromedriver = "path/to/chromedriver"
os.environ["webdriver.chrome.driver"] = chromedriver
url = urlparse.urlparse (proxy.proxy).path
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--proxy-server={0}".format(url))
driver = webdriver.Chrome(chromedriver,chrome_options =chrome_options)
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()

1 个答案:

答案 0 :(得分:0)

我认为实现此方案的最简单方法(使用Chrome默认配置文件捕获HAR文件)是在Linux中使用 chrome-har-capturer 命令。通过以下链接进行设置:

https://github.com/cyrus-and/chrome-har-capturer

安装此程序后,您可以从命令行启动chrome,如下所示:

google-chrome --remote-debugging-port=9222

使用以下命令捕获HAR文件(将HAR文件保存到当前路径中):

chrome-har-capturer -o <filename> <website>

您可以使用“ os”和“ subprocess”库在python中编写一个简短程序:

import os
import subprocess
import time

CHROME_TYPE = "google-chrome --remote-debugging-port=9222"
FILE_NAME = "example.har"
WEBSITE = " https://www.youtube.com"

def main():
    # open new terminal for 'open chrome' command
    browserProcess = subprocess.Popen(CHROME_TYPE, stdout=subprocess.PIPE, shell=True)
    # wait for the chrome window opening
    time.sleep(3)
    # the
    os.system("chrome-har-capturer -o "+FILE_NAME+WEBSITE)

if __name__ == "__main__":
    main()