Где найти весь контент HTML в исходном коде Chromium
В настоящее время я пытаюсь сделать это: как только веб-страница загружается, выясните, имеет ли URL определенный шаблон (скажем, www.wikipedia.com/*
), а затем, если это так, анализируйте содержимое HTML этой веб-страницы, как можно сделать с BeautifulSoup
и проверьте, есть ли на веб-странице div
с классом foo
и идентификатор boo
, Любая идея, где я могу написать этот код, то есть где я могу получить доступ к URL, где мне нужно слушать, чтобы знать, что веб-страница закончила загрузку, после чего я могу искать URL и контент HTML, а также где и как я могу разобрать HTML?
Я пытался пройти код в src/chrome/browser/tab_contents
Я не мог найти разумное место, где я мог бы сделать все это.
3 ответа
Взгляните на следующие концептуальные прикладные уровни, которые показывают, как Chromium отображает веб-страницы:
Источник изображения: https://docs.google.com/drawings/d/1gdSTfvLxbJDbX8oiWo5LTwAmXmdMQvjoUhYEhfhj0-k/edit
Различные слои описаны как:
- WebKit: движок рендеринга, общий для Safari, Chromium и всех других браузеров на базе WebKit. Порт является частью WebKit, который интегрируется с зависящими от платформы системными сервисами, такими как загрузка ресурсов и графика.
- Клей: Преобразует типы WebKit в типы Chromium. Это наш "слой внедрения WebKit". Это основа двух браузеров, Chromium и test_shell (что позволяет нам тестировать WebKit).
- Renderer / Render host: Это "многопроцессорный слой внедрения" в Chromium. Он передает уведомления и команды через границы процесса.
- WebContents: компонент многократного использования, являющийся основным классом модуля Content. Он легко встраивается, чтобы обеспечить многопроцессорное отображение HTML в представлении. См. Страницы модуля контента для получения дополнительной информации.
- Браузер: представляет окно браузера, оно содержит несколько веб-содержимого.
- Помощники по вкладкам : отдельные объекты, которые можно прикрепить к веб-контенту (через миксины WebContentsUserData). Браузер присоединяет их набор к содержанию WebContent, которое он содержит (один для значков, один для инфобаров и т. Д.).
Поскольку ваша цель - получить доступ и интерпретировать HTML-содержимое веб-страницы по элементам и / или классам, вы можете посмотреть на процесс рендеринга, использующий Blink:
Средства визуализации используют движок с открытым исходным кодом Blink для интерпретации и разметки HTML.
Блинк имеет WebDocument
класс, который позволяет получить доступ к HTML-контенту и другим свойствам веб-страницы:
WebDocument document = GetMainFrame()->GetDocument();
WebElement element = document.GetElementById(WebString::FromUTF8("example"));
// document.Url();
Вам необходимо использовать библиотеку на стороне сервера для анализа содержимого запрашиваемой HTML-страницы. Например, в Java есть библиотека "jsoup", для других языков на стороне сервера могут быть другие альтернативы. Основная проблема, которую вы можете найти, - это "запретить доступ" из-за ограничений безопасности, но, поскольку вы не пытаетесь получить доступ к службам REST или подобным вещам, а только анализируете чистый HTML для найденных шаблонов строк, это должно быть легко сделано с помощью "jsoup", Был проект, в котором подобные вещи были запрограммированы для доступа к страницам веб-сайтов и анализа строки html ответа.
Document doc = Jsoup.connect("http://jsoup.org").get();
Element link = doc.select("a").first();
String relHref = link.attr("href"); // == "/"
String absHref = link.attr("abs:href"); // "http://jsoup.org/"
Смотрите: https://jsoup.org/
Чистый будет через протокол удаленной отладки Chrome
Используйте методы DOM, чтобы получить корневой DOM и ходить, искать или запрашивать DOM
Это также упростит тестирование: вы можете реализовать логику на своем любимом языке сценариев, используя существующую клиентскую библиотеку (их много), и когда это сработает, внедрите ее в C++.
Если это по какой-то причине должно быть обработано в Chromium, в качестве следующего шага запустите поток, который подключается к нему и выполняет операции.