在Chromium源代码中找到完整HTML内容的位置

时间:2018-08-30 11:23:34

标签: google-chrome chromium webviewchromium

我当前正在尝试执行此操作:网页加载后,找出URL是否具有某种模式(例如www.wikipedia.com/*),然后,如果可以,则可以解析该网页的HTML内容对BeautifulSoup进行操作,并检查网页是否具有类div和ID foo的{​​{1}}。任何想法我都可以在哪里写这段代码,也就是我可以在哪里访问URL,我需要在哪里收听以了解网页已完成加载,接下来可以查找URL和HTML内容,以及在何处以及如何解析HTML?

我尝试遍历boo中的代码,找不到可以执行所有操作的合理位置。

3 个答案:

答案 0 :(得分:4)

看看下面的概念应用程序层,它们代表Chromium如何显示网页:

How Chromium Displays Web Pages: Conceptual application layers

图片来源: https://docs.google.com/drawings/d/1gdSTfvLxbJDbX8oiWo5LTwAmXmdMQvjoUhYEhfhj0-k/edit

described的不同层为:

  
      
  • WebKit::渲染引擎​​在Safari,Chromium和所有其他基于WebKit的浏览器之间共享。 端口是WebKit的一部分,与基于平台的系统服务(例如资源加载和图形)集成。
  •   
  • 胶水::将WebKit类型转换为Chromium类型。这是我们的“ WebKit嵌入层”。它是两个浏览器Chromium和test_shell(允许我们测试WebKit)的基础。
  •   
  • 渲染器/渲染主机:这是Chromium的“多进程嵌入层”。它跨进程边界代理通知和命令。
  •   
  • WebContents::是可重复使用的组件,它是Content模块的主要类。它很容易嵌入,以允许将HTML的多进程呈现到视图中。有关更多信息,请参见content module pages
  •   
  • 浏览器::表示浏览器窗口,其中包含多个WebContentses。
  •   
  • 标签助手::可以附加到WebContents的单个对象(通过WebContentsUserData mixin)。浏览器会将其中的各种内容附加到它所拥有的WebContents(一个用于收藏夹图标,一个用于信息栏等)。
  •   

由于您的目标是按元素和/或类访问和解释网页的HTML内容,因此您可以查看呈现过程which uses Blink

  

渲染器使用Blink开源布局引擎来解释和布局HTML。

眨眼具有WebDocument class,可让您访问HTML内容和网页的其他属性:

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

答案 1 :(得分:1)

最干净的将通过镀铬remote debugging protocol

使用DOM方法获取根DOM和walk, search, or query the dom

这也将使测试变得更加简单:您可以使用现有的客户端库(有很多)以自己喜欢的脚本语言来实现逻辑,并且一旦可行,就可以用C ++来实现。

如果出于某种原因必须在Chromium中进行此操作,则下一步应启动连接到此线程并执行操作的线程。

答案 2 :(得分:1)

您需要 使用服务器端库来解析请求的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/