Я использую python selenium с Chrome Headless и прокси-сервером browsermob для распечатки всех соединений, которые инициируются при загрузке страницы. Я особенно заинтересован в каждом соединении, которое связано с тегами отслеживания, такими как utag.js. проблема в том, что я не вижу их при использовании своего скрипта, однако я вижу их в консоли разработчика браузера, когда просматриваю страницу вручную. Я подозреваю, что мне не хватает чего-то, что могло бы запустить JS, но не могу понять, что.
это мой сценарий:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import os
import subprocess
from browsermobproxy import Server
proxy_options = {'port': 8888}
server= Server(path="/home/ubuntu/findanalytics/browsermob-proxy-2.1.4/bin/browsermob-proxy", options=proxy_options)
server.start()
proxy= server.create_proxy()
chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--window-size=1920x1080")
chrome_options.add_argument("--proxy-server={0}".format(proxy.proxy))
# next one would be possible via chrome options too but does not seem to work
# it is needed to make HTTPS visible in BMP
desired_capabilities = {"acceptInsecureCerts":True}
chrome_driver = os.getcwd()+"/chromedriver"
driver = webdriver.Chrome(chrome_options=chrome_options,executable_path=chrome_driver,desired_capabilities=desired_capabilities)
proxy.new_har("something")
driver.get("https://www.salt.ch")
for connection in proxy.har['log']['entries']:
print connection['request']['url']
server.stop()
driver.quit()
Может ли кто-нибудь указать мне на возможное решение? Я искал некоторое время, но не нашел ни одного ... возможно, я просто использую неправильные условия поиска (просто использую salt.ch в качестве примера, поскольку они используют utag.js)
UPDATE
Если я что-то найду на этой странице, добавив следующий фрагмент кода от driver.get:
# search something to play with JS
searchstring = "samsung"
searchfield = driver.find_element_by_name("q")
searchfield.send_keys(searchstring)
searchbtn = driver.find_element_by_id("field-search-submit")
searchbtn.click()
# end
тогда я вижу, как срабатывает utag.js. Однако я хотел бы видеть это при загрузке страницы. Есть идеи?
"РЕШЕНИЕ"
Хорошо, я несколько решил это. Это некрасиво, и я надеюсь, что есть реальное решение, но теперь я вижу связи. Я выкладываю это здесь, на случай, если кто-то еще столкнется с этой проблемой. Но я также надеюсь, что кто-то более опытный, чем я, сможет предложить лучшее решение. Прямо сейчас я удалил часть поиска и добавил 10 секунд сна после driver.get (безобразно). Итак, полный, как-то работающий скрипт выглядит так:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import os
import subprocess
from browsermobproxy import Server
import time
PICPATH="/home/ubuntu/screenshots/"
proxy_options = {'port': 8888}
server= Server(path="/home/ubuntu/findanalytics/browsermob-proxy-2.1.4/bin/browsermob-proxy", options=proxy_options)
server.start()
proxy= server.create_proxy()
chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--window-size=1920x1080")
chrome_options.add_argument("--proxy-server={0}".format(proxy.proxy))
# next one would be possible via chrome options too but does not seem to work
# it is needed to make HTTPS visible in BMP
desired_capabilities = {"acceptInsecureCerts":True}
chrome_driver = os.getcwd()+"/chromedriver"
driver = webdriver.Chrome(chrome_options=chrome_options,executable_path=chrome_driver,desired_capabilities=desired_capabilities)
proxy.new_har("something")
driver.get("https://www.salt.ch")
time.sleep(10)
for connection in proxy.har['log']['entries']:
print connection['request']['url']
server.stop()
driver.quit()