Сохранение содержимого полной страницы с использованием Selenium

Мне было интересно, как лучше всего сохранить все файлы, которые извлекаются, когда Selenium посещает сайт. Другими словами, когда Selenium посещает http://www.google.com Я хочу сохранить HTML, JavaScript (включая скрипты, на которые ссылаются теги src), изображения и потенциально содержимое, содержащееся в iframe. Как это может быть сделано?

Я знаю, что getHTMLSource() вернет содержимое HTML в теле основного фрейма, но как это можно расширить, чтобы загрузить полный набор файлов, необходимых для повторной визуализации этой страницы. Спасибо заранее!

Ответ 1

Селен не предназначен для этого, вы можете:

  • Используйте getHtmlSource и проанализируйте полученный HTML-код для ссылок на внешние файлы, которые затем можно загрузить и сохранить вне Selenium.
  • Используйте что-то другое, кроме Selenium, для загрузки и хранения автономной версии веб-сайта. Я уверен, что есть много инструментов, которые могли бы сделать это, если вы выполните поиск. Например, WGet может выполнять рекурсивную загрузку (http://en.wikipedia.org/wiki/Wget#Recursive_download)

Есть ли причина, по которой вы хотите использовать Selenium? Является ли эта часть вашей стратегии тестирования или вы просто хотите найти инструмент, который будет создавать автономную копию страницы?

Ответ 2

Хорошим инструментом для этого является http://www.httrack.com/, Selenium не предоставляет никакого API для этого. Если вам нужно сохранить полный контент страницы из тестового примера в селене, возможно, вы можете выполнить httrack в качестве инструмента командной строки.

Спасибо

Ответ 3

Если вы действительно хотите использовать Selenium, то вы можете эмулировать Ctrl+S для сохранения страницы, но затем будет труднее/труднее (также зависит от ОС) эмулировать нажатие клавиши Enter или изменение местоположения, в котором вы хотите сохранить веб-страницу. и его содержание.

Я хотел сделать то же самое с Selenium, но понял, что могу просто использовать такие инструменты, как wget, и мне действительно не нужно было использовать только Selenium. Поэтому я в итоге использовал wget, он действительно мощный и выполняет именно то, что мне нужно,

Вот как вы могли бы сделать это, используя wget из скрипта Python:

    import os
    # Save HTML
    directory = 'directory_to_save_webpage_content/'
    url = 'http://www.google.com'
    wget = "wget -p -k -P {} {}".format(directory, url)
    os.system(wget)

Аргументы переданы только для того, чтобы сделать возможным просмотр страницы в автономном режиме, как будто вы все еще онлайн.

--page-requisites           -p   -- get all images needed to display page
--convert-links             -k   -- convert links to be relative
--directory-prefix          -P   -- specify prefix to save files to

Ответ 4

Единственный встроенный метод Selenium для загрузки исходного контента -

driver = webdriver.Chrome()
driver.get('www.someurl.com')
page_source = driver.page_source

Но это не приводит к загрузке всех сценариев изображений, CSS и JS, как если бы вы использовали Ctrl + S на веб-странице. Поэтому вам нужно будет эмулировать клавиши ctr + s после перехода на веб-страницу, как заявлено Algorithmatic.

Я сделал суть, чтобы показать, как это сделано. https://gist.github.com/GrilledChickenThighs/211c307edf8f828806c4bb4e4707b106

# Download entire webpage including all javascript, html, css of webpage. Replicates ctrl+s when on a webpage.

from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys

def save_current_page():      
    ActionChains(browser).send_keys(Keys.CONTROL, "s").perform()