Вы можете получить доступ к журналам браузера или chromedriver, они немного отличаются, когда речь идет о сетевых ответах. Журнал браузера называется performance
, а журнал драйвера — driver
. Они возвращают json-подобный объект, который вы можете анализировать для извлечения событий с сетевыми методами внутри них:
{'level': 'INFO',
'message': '{"message":{"method":"Page.frameStoppedLoading","params":{"frameId":"FB10764A3ABF7FFC83110C39C5F7BF77"}},"webview":"C2D13BD13CF743B6D0695B35E9CC935C"}',
'timestamp': 1538607113832},
{'level': 'INFO',
'message': '{"message":{"method":"Page.frameDetached","params":{"frameId":"FB10764A3ABF7FFC83110C39C5F7BF77"}},"webview":"C2D13BD13CF743B6D0695B35E9CC935C"}',
'timestamp': 1538607113838},
{'level': 'INFO',
'message': '{"message":{"method":"Network.requestWillBeSent","params":{"documentURL":"https://stackoverflow.com/questions/52633697/selenium-python-how-to-capture-network-traffics-response","frameId":"C2D13BD13CF743B6D0695B35E9CC935C","hasUserGesture":false,"initiator":{"type":"other"},"loaderId":"5331BFDC4F466FCED920CFC9F033D2EC","request":{"headers":{"Upgrade-Insecure-Requests":"1","User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"},"initialPriority":"VeryHigh","method":"GET","mixedContentType":"none","referrerPolicy":"no-referrer-when-downgrade","url":"https://stackoverflow.com/questions/52633697/selenium-python-how-to-capture-network-traffics-response"},"requestId":"5331BFDC4F466FCED920CFC9F033D2EC","timestamp":104499.729,"type":"Document","wallTime":1538607113.838206}},"webview":"C2D13BD13CF743B6D0695B35E9CC935C"}',
'timestamp': 1538607113839},...}
Вам нужно включить регистрацию в DesiredCapabilities
, а затем разобрать ее с помощью модуля JSON
:
import json
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
caps = DesiredCapabilities.CHROME
caps['goog:loggingPrefs'] = {'performance': 'ALL'}
driver = webdriver.Chrome(desired_capabilities=caps)
driver.get('https://stackoverflow.com/questions/52633697/selenium-python-how-to-capture-network-traffics-response')
def process_browser_log_entry(entry):
response = json.loads(entry['message'])['message']
return response
browser_log = driver.get_log('performance')
events = [process_browser_log_entry(entry) for entry in browser_log]
events = [event for event in events if 'Network.response' in event['method']]
Я не знаю, можете ли вы получить доступ к самим данным ответа, используя это, но вы можете получить URL-адрес ответа.
Другой вариант — использовать такую библиотеку, как selenium-wire.
ОБНОВЛЕНИЕ 2020-10-07 ⬇
Как @Roey B и @Inactivist объясните в комментариях, вы можете получить доступ к телу ответа, используя Network.getResponseBody:
driver.execute_cdp_cmd('Network.getResponseBody', {'requestId': events[0]["params"]["requestId"]})
person
hellpanderr
schedule
03.10.2018