Chrome 如何快速获取 request header?
一般的做法就是 f12 打开 dev tool 然后复制粘贴,
但是现在想用程序自动化的实现这个功能
我这边用了 mitmproxy 比较卡。
然后想到了 tampermonkey, 不太熟悉 js 没有找到办法, 这里请问一下如何能实现这个功能。 通过后台的程序自动化的获取 request header
一般的做法就是 f12 打开 dev tool 然后复制粘贴,
但是现在想用程序自动化的实现这个功能
我这边用了 mitmproxy 比较卡。
然后想到了 tampermonkey, 不太熟悉 js 没有找到办法, 这里请问一下如何能实现这个功能。 通过后台的程序自动化的获取 request header
async def show_headers(tab: AsyncTab):
await tab.wait_response(filter_function=lambda r: ‘httpbin.org/headers’ in
r[‘params’][‘response’][‘url’],
callback_function=lambda r: print(
r[‘params’][‘response’][‘headers’], ‘n’, r[
‘params’][‘response’][‘requestHeaders’]))
# await tab.wait_request(lambda r: print(r))
async def main():
async with AsyncChromeDaemon() as cd:
async with cd.connect_tab() as tab:
task = asyncio.create_task(show_headers(tab))
await tab.goto(‘https://httpbin.org/headers’)
# print(await tab.html)
await task
if __name__ == “__main__”:
asyncio.run(main())
“`
https://paste.ubuntu.com/p/QrDmcGwxvS/
加上 Headless 和禁用图片, 也可以屏蔽 css 和 mp4 没放上, 冷启动 3 秒, 连接已经启动的 tab 大概 1 秒(基本就是花在下载), 同域名并发被 Chrome 限制在 6 以内, 所以没写并发的
https://github.com/kajweb/stop-debugger
基本代码在这里比较粗糙
“`
import pychrome
from urllib.parse import urlparse
import subprocess, signal
import os
import time
def killprocess(pname):
p = subprocess.Popen([‘ps’, ‘-A’], stdout=subprocess.PIPE)
out, err = p.communicate()
for line in out.splitlines():
pinfo = line.decode().lower()
if pname in pinfo:
pid = int(line.split(None, 1)[0])
os.kill(pid, signal.SIGKILL)
header = dict()
url = “https://www.dogedoge.com”
if not url.endswith(‘/’):
url += ‘/’
domain = urlparse(url).netloc
killprocess(‘chrome’)
cmd = ‘google-chrome-stable –remote-debugging-port=9222’
p = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE)
time.sleep(3)
# 创建一个浏览器实例
browser = pychrome.Browser(url=”http://127.0.0.1:9222″)
# 新建一个页签
tab = browser.new_tab()
# 需要注册的回调函数
def request_will_be_sent(**kwargs):
if url == kwargs.get(‘request’).get(‘url’):
header = kwargs.get(‘request’).get(‘headers’)
return
tab.Network.requestWillBeSent = request_will_be_sent
# 开始接收消息, requestWillBeSent 事件发生时被注册的回调函数也可以执行
tab.start()
# 调用方法
tab.Network.enable()
# 调用方法并设置超时时间
tab.Page.navigate(url=url, _timeout=5)
input()
# 等待页面加载
tab.wait(5)
# 停止处理事件, 停止从 chrome 接收消息
tab.stop()
# 关闭页签
browser.close_tab(tab)
“`