Selenium Python - получите список всех загруженных URL-адресов (изображения, скрипты, таблицы стилей и т. Д.) - PullRequest
0 голосов
/ 04 июня 2018

Когда Google Chrome загружает веб-страницу через Selenium, он может загружать дополнительные файлы, необходимые для этой страницы, например из тегов <img src="example.com/a.png"> или <script src="example.com/a.js">.Кроме того, файлы CSS.

Как получить список всех URL-адресов, которые были загружены при загрузке страницы браузером?(Программно, с использованием Selenium в Python с chromedriver) То есть список файлов, отображаемый на вкладке «Сеть» инструментов разработчика в Chrome (отображает список загруженных файлов).

Пример кодаиспользуя селен, хромедрайвер:

from selenium import webdriver
options = webdriver.ChromeOptions()
options.binary_location = "/usr/bin/x-www-browser"
driver = webdriver.Chrome("./chromedriver", chrome_options=options)
# Load some page
driver.get("https://example.com")
# Now, how do I see a list of downloaded URLs that took place when loading the page above?

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Продолжая предложение @ GPT14 в его ответе , я написал небольшой скрипт, который точно выполняет то, что я хотел, и распечатывает список URL-адресов, которые загружает определенная страница.

При этом используетсяBrowserMob Proxy.Большое спасибо @ GPT14 за предложение использовать его - он отлично работает для наших целей.Я изменил код из его ответа и адаптировал его для веб-драйвера Google Chrome вместо Firefox.Я также расширил скрипт так, чтобы он проходил через вывод HAR JSON и перечислял все URL-адреса запроса.Не забудьте адаптировать приведенные ниже параметры под свои нужды.

from browsermobproxy import Server
from selenium import webdriver

# Purpose of this script: List all resources (URLs) that
# Chrome downloads when visiting some page.

### OPTIONS ###
url = "https://example.com"
chromedriver_location = "./chromedriver" # Path containing the chromedriver
browsermobproxy_location = "/opt/browsermob-proxy-2.1.4/bin/browsermob-proxy" # location of the browsermob-proxy binary file (that starts a server)
chrome_location = "/usr/bin/x-www-browser"
###############

# Start browsermob proxy
server = Server(browsermobproxy_location)
server.start()
proxy = server.create_proxy()

# Setup Chrome webdriver - note: does not seem to work with headless On
options = webdriver.ChromeOptions()
options.binary_location = chrome_location
# Setup proxy to point to our browsermob so that it can track requests
options.add_argument('--proxy-server=%s' % proxy.proxy)
driver = webdriver.Chrome(chromedriver_location, chrome_options=options)

# Now load some page
proxy.new_har("Example")
driver.get(url)

# Print all URLs that were requested
entries = proxy.har['log']["entries"]
for entry in entries:
    if 'request' in entry.keys():
        print entry['request']['url']

server.stop()
driver.quit()
0 голосов
/ 04 июня 2018

Возможно, вы захотите взглянуть на BrowserMob Proxy.Он может собирать данные о производительности для веб-приложений (через формат HAR), а также управлять поведением и трафиком браузера, такими как внесение в белый и черный список контента, моделирование сетевого трафика и задержек, а также перезапись HTTP-запросов и ответов.

Взято из readthedocs, использование простое, и оно хорошо интегрируется с API-интерфейсом Selenn Webdriver.Вы можете прочитать больше о BMP здесь .

from browsermobproxy import Server
server = Server("path/to/browsermob-proxy")
server.start()
proxy = server.create_proxy()

from selenium import webdriver
profile  = webdriver.FirefoxProfile()
profile.set_proxy(proxy.selenium_proxy())
driver = webdriver.Firefox(firefox_profile=profile)


proxy.new_har("google")
driver.get("http://www.google.co.uk")
proxy.har # returns a HAR JSON blob

server.stop()
driver.quit()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...