соединения, инициированные utag, не видны в прокси моб браузера (python selenium) - PullRequest
0 голосов
/ 04 сентября 2018

Я использую 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()
...