我想收听网络事件(基本上是您在Chrome的开发人员工具/检查中转到"网络"选项卡时可以看到的所有活动),并在通过Python加载页面时记录特定事件。
这可能吗?谢谢!
具体来说:
- 转到
webpage.com
- 打开 Chrome 开发工具,然后转到"
Network
"标签页 - 将
api.webpage.com
添加为筛选器 - 刷新页面 [滚动]
我希望能够捕获这些事件的名称,因为有些特定 ID 无法通过 UI 使用。
2021 年更新我不得不对扎克的答案进行一些更改才能使其正常工作。带有###的评论是我的评论
def get_perf_log_on_load(url, headless=True, filter=None):
# init Chrome driver (Selenium)
options = Options()
options.add_experimental_option('w3c', False) ### added this line
options.headless = headless
cap = DesiredCapabilities.CHROME
cap["loggingPrefs"] = {"performance": "ALL"}
### installed chromedriver.exe and identify path
driver = webdriver.Chrome(r"C:UsersasiddiquiDownloadschromedriver_win32chromedriver.exe", desired_capabilities=cap, options=options) ### installed
# record and parse performance log
driver.get(url)
if filter:
log = [item for item in driver.get_log("performance") if filter in str(item)]
else:
log = driver.get_log("performance")
driver.close()
return log
虽然它没有完全回答这个问题,但@mihai-andrei的回答让我最接近。
如果有人正在寻找 Python 解决方案,那么以下代码应该可以解决问题:
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.webdriver.chrome.options import Options
def get_perf_log_on_load(self, url, headless = True, filter = None):
# init Chrome driver (Selenium)
options = Options()
options.headless = headless
cap = DesiredCapabilities.CHROME
cap['loggingPrefs'] = {'performance': 'ALL'}
driver = webdriver.Chrome(desired_capabilities = cap, options = options)
# record and parse performance log
driver.get(url)
if filter: log = [item for item in driver.get_log('performance')
if filter in str(item)]
else: log = driver.get_log('performance')
driver.close()
return log
您可以避开chrome并使用像mitmproxy这样的脚本化代理。https://mitmproxy.org/
另一个想法是使用硒来驱动浏览器并从性能日志中获取事件https://sites.google.com/a/chromium.org/chromedriver/logging/performance-log