Как сравнить два полученных .html файла с помощью Python?
Суть вопроса вот в чем: есть задача, получить два .html с одной и той же странички, записать их в разные файлы 1 и 2 соответственно. После чего сопоставить друг с другом, на предмет различий в html и все изменения записать в отдельный третий файл. Данная схема должна быть реализована на Python с использованием Selenium в виде автотеста. Для отслеживания изменений в разметке (если вдруг то то правил на горячую без гита).
Как итог, собрал скрипт (представлен ниже). Но столкнулся с рядом проблемм при попытке сравнить два файла. Перерыл несколько тем в интернете, но увы безысходно. Отсюда возник вопрос, а вообще реально ли такое реализовать? Возможно у кого то есть опыт?
Код проекта:
import time
from bs4 import BeautifulSoup
from selenium import webdriver
from htmldiff import render_html_diff
from xml.etree import ElementTree as ET
def get_dom_tree(url, filename):
# Создаем экземпляр браузера
driver = webdriver.Chrome()
driver.get(url)
# Получаем содержимое страницы
page_source = driver.page_source
# Закрываем браузер
driver.quit()
# Парсим HTML с помощью BeautifulSoup
soup = BeautifulSoup(page_source, 'html.parser')
# Записываем результат в файл
with open(filename, 'w') as file:
file.write(soup.prettify())
def parse_html_to_tree(html):
return ET.fromstring(html)
def compare_dom_trees(old_file, new_file, diff_file):
# Читаем содержимое файлов
with open(old_file, 'r', encoding='utf-8') as file:
old_tree = parse_html_to_tree(file.read())
with open(new_file, 'r', encoding='utf-8') as file:
new_tree = parse_html_to_tree(file.read())
# Сравниваем два DOM дерева
diff = render_html_diff(old_tree, new_tree)
# Записываем разницу в файл
with open(diff_file, 'w', encoding='utf-8') as file:
file.write(diff)
def main():
# Задаем URL
url = ''
# Получаем первое DOM дерево
old_file = 'old.html'
get_dom_tree(url, old_file)
# Ждем 2 минуты
time.sleep(10)
# Получаем второе DOM дерево
new_file = 'new.html'
get_dom_tree(url, new_file)
# Сравниваем два DOM дерева и записываем разницу в файл
diff_file = 'diff.html'
compare_dom_trees(old_file, new_file, diff_file)
if __name__ == '__main__':
main()