Я хочу захватить файл HAR страницы, которая требует аутентификации. Я использую селен webdriver и browsermob-прокси.
Сначала я открываю страницу входа в браузере для сбора файлов cookie браузера, затем использую модуль запросов для входа и сохранения файлов cookie проверки подлинности, а затем пытаюсь передать их в браузер для загрузки содержимого со страницы. Я действительно хочу.
Мой код представляет собой комбинацию Python - запросы, Selenium - передача файлов cookie при входе в систему и Как сбросить файл Har, используемый модулем Browser-Mob-Proxy Для Python?
def fetch_resources(url):
server = Server("./Resources/browsermob-proxy-2.1.4/bin/browsermob-proxy")
server.start()
sleep(1)
# WARNING: trustAllServers is a security risk but is necessary for SSL due to browsermob-proxy cert checks: WARNING
# gotcha: need to install BMP cert into browser
proxy = server.create_proxy(params={"trustAllServers": "true"})
sleep(1)
#options = Options()
#options.headless = True
# configure the browser proxy in Firefox
profile = webdriver.FirefoxProfile()
# issue: https://stackoverflow.com/a/58744858
profile.set_proxy(proxy.selenium_proxy())
browser = webdriver.Firefox(
#options=options,
firefox_profile=profile,
executable_path="./Resources/geckodriver",
proxy=proxy.selenium_proxy(),
)
user = random.choice(list(creds.keys()))
proxy.new_har(ref="Auth",options={"captureHeaders": True, "captureContent": True})
browser.get("http://127.0.0.1:4000/login")
response_har = proxy.har
#storing the cookies generated by the browser
request_cookies_browser = browser.get_cookies()
#making a persistent connection using the requests library
s = requests.Session()
data = {"name":user, "password":creds[user]}
r = s.post("http://127.0.0.1:4000/login", data=data)
#passing the cookie of the response to the browser
dict_resp_cookies = s.cookies.get_dict()
response_cookies_browser = [{'name':name, 'value':value} for name, value in dict_resp_cookies.items()]
print("coookies", response_cookies_browser)
c = [browser.add_cookie(c) for c in response_cookies_browser]
proxy.new_har(ref="Content", options={"captureHeaders": True, "captureContent": True})
browser.get(url)
print(proxy.har)
# wait until the entire page loads
print(url)
sleep(5)
# returns network logs (HAR) as JSON
result = extract_resource_urls(proxy.har)
server.stop()
browser.quit()
return result
Первый HAR для / login заполняется, как ожидается, и браузер регистрируется на второй странице, как и ожидалось. Но второй HAR пуст:
{'log': {'version': '1.2', 'creator': {'name': 'BrowserMob Proxy', 'version': '2.1.4', 'comment': ''}, 'pages': [{'id': 'Content', 'startedDateTime': '2020-04-28T10:19:08.885-04:00', 'title': 'CTFd', 'pageTimings': {'comment': ''}, 'comment': ''}], 'entries': [], 'comment': ''}}
Это потому, что я на локальном хосте? Я пропускаю шаг в обработке файлов cookie или файлов HAR?