Сохранение содержимого полной страницы с использованием 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()