如何在客户端编程以获取整个GWT页面的Html快照(或捕获所有文本)?

如何在客户端编程以获取整个GWT页面的Html快照(或捕获所有文本)?,gwt,gwtp,Gwt,Gwtp,为了让您了解我想要什么,请阅读以下内容: 假设您有一个GWT页面(mydomain.com#!article)。该页面包含许多从DB下载的小部件和数据。DB数据&小部件相互混合,例如标签可以包含客户名称(客户名称来自DB) 所以,该页面上的所有内容都是javascript,即当您查看源代码时,只能看到javascript。但是,如果您在Chrome中打开该GWT页面并将其另存为“myGwtArticlePage.htm”到本地PC中,然后重新打开“myGwtArticlePage.htm”,您可

为了让您了解我想要什么,请阅读以下内容:

假设您有一个GWT页面(
mydomain.com#!article
)。该页面包含许多从DB下载的小部件和数据。DB数据&小部件相互混合,例如标签可以包含客户名称(客户名称来自DB)

所以,该页面上的所有内容都是javascript,即当您查看源代码时,只能看到javascript。但是,如果您在Chrome中打开该GWT页面并将其另存为“
myGwtArticlePage.htm
”到本地PC中,然后重新打开“
myGwtArticlePage.htm
”,您可以看到所有文本、小部件。。。在“
myGwtArticlePage.htm
”中的内容与“
mydomain.com”#!article
”中的内容完全相同

现在,您右键单击并查看“
myGwtArticlePage.htm
”的源代码,您不仅会看到Javascript,还会看到所有文本,&Db数据和小部件仍在其中

因此,“
myGwtArticlePage.htm
”被称为“
mydomain.com!”文章的Html快照

你明白了吗

现在我希望客户端的程序能够捕获“
myGwtArticlePage.htm
”的所有文本

因此,MyArticlePresenter.java(在客户端软件包中)的工作原理如下:

private AsyncCallback<GetArticleResult> getArticleCallback=new AsyncCallback<GetArticleResult>(){
    @Override
public void onSuccess(GetArticleResult result) {
        String articleData=result.getArticleData;
        //... many other data from DB .....

        myLabel.setText(articleData);
        //... many other widgets that setText of the DB data ....

        // Now what I should do here to get Html Snapshot of "`mydomain.com#!article`" ??

    }
}
private AsyncCallback getArticleCallback=new AsyncCallback(){
@凌驾
成功时公共无效(GetArticleResult){
String articleData=result.getArticleData;
//…数据库中的许多其他数据。。。。。
myLabel.setText(articleData);
//…设置DB数据文本的许多其他小部件。。。。
//现在我应该在这里做什么来获取“`mydomain.com\#!article`”的Html快照??
}
}
注意:人们说我可以使用HTMLUnit,但HTMLUnit在服务器上工作,而不是在客户端包上工作。此外,HTMLUnit无法正确解析GWTP页面。GWTP是在GWTP框架下构建的GWT应用程序


我希望有人能帮我问这个问题。

根据定义,客户端代码必须在客户端上运行-对于GWT或任何HTML/JS应用程序,这意味着在web浏览器中

HtmlUnit是一款网络浏览器,但它从不呈现在屏幕上。您仍然可以要求它提供当前页面的HTML内容。它完全是用Java编写的,因此可以轻松地在任何JVM中运行,包括服务器。还考虑幻像,无头铬-你可以编写它来截图,导出HTML等。它是一个本地的应用程序,你需要为你的服务器得到正确的构建,你需要做的配线来调用幻像。< /P> 当正确配置时,HtmlUnit应该与GWT完美配合
GWTTestCase
s默认情况下,使用HtmlUnit在浏览器中运行GWT测试,而无需启动“真实”浏览器实例。当然,要做到这一点,HtmlUnit必须在正常的JVM中运行,就像您的服务器将在其上运行一样

也就是说,您不能直接调用客户机代码,而是在HtmlUnit浏览器中启动HTML/JS(从GWT/Java编译)页面

另一个细节考虑速度。特别是如果你对被搜索引擎编入索引感兴趣,速度之所以重要有两个原因。首先,搜索引擎将很快进入这些页面,当Google/Yahoo/Bing路过并下载它能找到的所有URL时,你不希望你的服务器被杀死。其次,在对页面进行排名时,服务器可能会考虑url完成的速度

  • 开发模式很慢,因为浏览器中的JS(甚至HtmlUnit)和真正的Java之间来回调用。由于您正在将应用程序编译为JS,因此无需在服务器上使用开发模式
  • 预加载页面:考虑定期运行HTMLUnter并生成普通HTML页面,然后在请求时立即提供服务。如果您的数据不经常更改,这对您来说可能很好,而且如果页面已经预呈现和缓存,这将是最快的

最后,如果已经在使用GWTP,请查看他们的爬虫服务,该服务似乎旨在使用编码片段过滤我们的URL并翻译为#!令牌,然后将其传递给GWTP应用程序。有关详细信息,请参阅。

尝试使用
RootPanel.getBodyElement().getInnerHTML()
RootPanel.getBodyElement().getInnerText()
。您可以为特定元素调用它,但它无法读取celltable中的文本,对吗?我不知道您想要实现什么?所有客户端代码都在
JavaScript
中。我想让我的GWTP应用程序可爬行,因为HTMLUnit不适用于GWTP。最近关于g+的一个讨论是:嗨,谢谢你的回答,HTMLUnit不适用于GWTP&谷歌爬虫服务只会使页面空白&不太稳定。此外,GWTP内部有很多字符串,例如。我的问题是,谷歌会索引的标题属性吗?很多人说Google crawler不会厌倦索引,因为html页面中的数据太多了无头浏览器不稳定,您必须猜测设置HTMLUnit超时速度很慢,所以我使用服务器端快照解决方案。它的快速和集中,因此它不会显示100%的html图形用户界面作为HTMLUnit,但爬虫将不需要太多的数据权利。你瘦爬虫服务工作正常吗?检查此链接-->为什么它不显示其中包含很长文本列表的所有文本。我确信GWTP本身是经过单元测试的,毫无疑问是在HtmlUnit的帮助下进行的。我也不确定crawlservice.appspot.com到底应该做什么,但它确实像预期的那样返回了您在查看源代码时获得的内容。也就是说,返回的html与您从chessbomb.com/site/获得的html相同,因此,即使启用了爬虫服务,爬虫服务似乎也无法正确生成正确的html。与禁用JavaScript的vs进行比较。