Где найти весь контент HTML в исходном коде Chromium - PullRequest
0 голосов
/ 30 августа 2018

Я сейчас пытаюсь сделать это: как только веб-страница загрузится, выясните, имеет ли URL определенный шаблон (скажем, www.wikipedia.com/*), а затем, если это так, проанализируйте HTML-содержимое этой веб-страницы, как это можно сделать с помощью BeautifulSoup и проверьте, есть ли у веб-страницы div с классом foo и идентификатором boo. Любая идея, где я могу написать этот код, то есть где я могу получить доступ к URL, где мне нужно слушать, чтобы знать, что веб-страница закончила загрузку, после чего я могу искать URL и контент HTML, а также где и как я могу разобрать HTML?

Я попытался просмотреть код в src/chrome/browser/tab_contents, я не смог найти разумного места, где я мог бы все это сделать.

Ответы [ 3 ]

0 голосов
/ 07 сентября 2018

Чистым будет протокол Chrome Протокол удаленной отладки

Используйте методы DOM для получения корневого DOM и ходите, ищите или запрашивайте dom

Это также упростит тестирование: вы можете реализовать логику на своем любимом языке сценариев, используя существующую клиентскую библиотеку (их много), и когда это сработает, внедрите ее в C ++.

Если по какой-то причине этот процесс должен выполняться в Chromium, в качестве следующего шага запустите поток, который подключается к нему и выполняет операции.

0 голосов
/ 07 сентября 2018

Вам необходимо использовать библиотеку на стороне сервера для анализа содержимого запрашиваемой 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/

0 голосов
/ 07 сентября 2018

Посмотрите на следующие концептуальные прикладные слои , которые представляют, как Chromium отображает веб-страницы:

How Chromium Displays Web Pages: Conceptual application layers

Источник изображения: 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 в представлении. Для получения дополнительной информации см. страницы модуля содержимого .
  • Браузер: Представляет окно браузера, оно содержит несколько WebContentses.
  • Помощники по вкладкам: Отдельные объекты, которые можно прикрепить к веб-содержимому (через миксины WebContentsUserData). Браузер присоединяет их набор к содержанию WebContent, которое он содержит (один для favicons, один для infobars и т. Д.).

Поскольку ваша цель - получить доступ и интерпретировать HTML-содержимое веб-страницы по элементам и / или классам, вы можете обратиться к процессу рендеринга , в котором используется Blink :

Средства визуализации используют интерпретатор с открытым исходным кодом Blink для интерпретации и разметки HTML.

Blink имеет WebDocument класс , который позволяет получить доступ к HTML-содержимому и другим свойствам веб-страницы:

WebDocument document = GetMainFrame()->GetDocument();
WebElement element = document.GetElementById(WebString::FromUTF8("example"));
// document.Url();
...