标签: htmlunit

Htmlunit在Android应用程序上

有没有人得到HTMLUnit(或HtmlUnitDriver)来使用Android应用程序?

这是问题:我收到以下错误消息:

11-26 16:27:26.617: E/AndroidRuntime(1265): java.lang.NoClassDefFoundError: org/w3c/dom/css/CSSRule
Run Code Online (Sandbox Code Playgroud)

这就是我所做的:我尝试添加对以下链接中列出的jar的引用(在Project Dependencies和Project Transitive Dependencies下 - 仅编译,不包括test jar):

http://htmlunit.sourceforge.net/dependencies.html

然而Eclipse一直在崩溃,然后我发现一些问题说Android SDK中已经包含了一些jar:

xalan, xercesImpl and xml-apis
Run Code Online (Sandbox Code Playgroud)

Android上的HtmlUnit

HttpClient
Run Code Online (Sandbox Code Playgroud)

Android编程HtmlUnit

所以我删除了对这些罐子的引用,只保留以下内容:

commons-codec-1.4.jar
commons-collections-3.2.1.jar
commons-io-2.0.1.jar
commons-lang-2.6.jar
commons-logging-1.1.1.jar
cssparser-0.9.5.jar
htmlunit-2.9.jar
htmlunit-core-js-2.9.jar
httpmime-4.1.2.jar
nekohtml-1.9.15.jar
sac-1.3.jar
httpcore-4.1.3.jar
Run Code Online (Sandbox Code Playgroud)

正是在这个时候,应用程序能够运行,但是当执行以下代码行时,我开始得到错误:

final WebClient webClient = new WebClient();

11-26 16:27:26.617: E/AndroidRuntime(1265): java.lang.NoClassDefFoundError: org/w3c/dom/css/CSSRule
Run Code Online (Sandbox Code Playgroud)

我做了一个网络搜索,发现xml-apis-1.3.04.jar包含org/w3c/dom/css/CSSRule,所以我将该引用放回到项目中,但应用程序根本不会构建同样的错误消息在上面的第一个链接中描述:

[2011-11-26 16:39:52 - Myproj] Conversion to Dalvik format failed with error 1
Run Code Online (Sandbox Code Playgroud)

有人可以对此有所了解吗?

java android htmlunit

17
推荐指数
1
解决办法
3729
查看次数

HtmlUnit忽略JavaScript错误?

我正试图遍历一个网站,但在他们的一个页面上我收到此错误:

EcmaError: lineNumber=[671] column=[0] lineSource=[null] name=[TypeError] sourceName=[https://reservations.besodelsolresort.com/asp/CalendarPopup.js] message=[TypeError: Cannot read property "parentNode" from undefined (https://reservations.besodelsolresort.com/asp/CalendarPopup.js#671)]
com.gargoylesoftware.htmlunit.ScriptException: TypeError: Cannot read property "parentNode" from undefined (https://reservations.besodelsolresort.com/asp/CalendarPopup.js#671)
Run Code Online (Sandbox Code Playgroud)

无论如何我可以忽略这个错误吗?如果日历加载正确,我并不特别在意.

java htmlunit htmlunit-driver

17
推荐指数
3
解决办法
1万
查看次数

如何忽略与jQuery相关的HTMLUnit警告/错误?

是否有可能教HTMLUnit忽略网页上的某些 JavaScript脚本/文件?其中一些只是我的控制(如jQuery),我不能对它们做任何事情.警告很烦人,例如:

[WARN] com.gargoylesoftware.htmlunit.javascript.host.html.HTMLDocument:
getElementById(script1299254732492) did a getElementByName for Internet Explorer
Run Code Online (Sandbox Code Playgroud)

实际上我正在使用JSFUnit,HTMLUnit在它下面工作.

java htmlunit

15
推荐指数
1
解决办法
5718
查看次数

使用Python进行屏幕抓取

Python是否有提供JavaScript支持的屏幕抓取库?

我一直在使用pycurl来处理简单的HTML请求,而Java的HtmlUnit则用于需要JavaScript支持的更复杂的请求.

理想情况下,我希望能够完成Python的所有工作,但我没有遇到任何允许我这样做的库.它们存在吗?

python screen-scraping pycurl htmlunit

14
推荐指数
2
解决办法
9626
查看次数

使AJAX应用程序可抓取?如何在Google App Engine上构建简单的Web服务来生成HTML快照?

现实问题:

我的应用程序托管在Heroku上,据我所知,他无法提供运行无头(无GUI)浏览器的解决方案 - 例如HTMLUnit - 用于为Googlebot 生成HTML快照以索引我的AJAX内容.

我建议的解决方案:

如果您还没有,我建议您阅读Google的"使AJAX应用程序可抓取完整规范".

想象一下,我有:

  • 在域上的Heroku上托管的Sinatra应用程序http://example.com
  • 该应用程序在页面顶部TabA,TabB和TabC上有选项卡
  • 每个选项卡下都有SubTab1,SubTab2,SubTab3
  • onload如果url是http://example.com#!tab=TabA&subtab=SubTab3客户端Javascript location.hash通过AJAX 获取并加载TabA,SubTab3内容.

注意:Hash Bang(#!)是google规范的一部分.

我想在Google App Engine(GAE)上托管一个简单的"网络服务" :

  1. 接受URL参数,例如http://htmlsnapshot.appspot.com?url=http://example.com#!tab=TabA&subtab=SubTab3(url param应为URLEncoded)
  2. 运行HTMLUnit以http://example.com#!tab=TabA&subtab=SubTab3在服务器上打开并运行客户端javascript.
  3. 一旦一切都完成(或者已经过了45秒),HTMLUnit就会返回DOM.
  4. 返回的内容可以通过JSON/JSONP被送回,或者一个URL是回归生成并存储在谷歌应用程序引擎服务器上的文件(基于文件"缓存"结果)......开到这里建议.如果返回了文件的URL,则可以使用CURL获取源代码(也称为HTML快照).

我的http://example.com应用程序需要管理http://htmlsnapshot.appspot.com...基本上:

  1. 抓住Googlebots调用http://example.com/?_escaped_fragment_=tab=TabA%26subtab=SubTab3(googlebot抓取工具逃脱某些字符,例如%26 =&).
  2. 从后端发送请求http://htmlsnapshot.appspot.com?url=http://example.com#!tab=TabA&subtab=SubTab3(url param应为URLEncoded)
  3. 将返回的HTML快照渲染到前端.
  4. 谷歌索引内容,我们欢欣鼓舞!

我没有使用Google App Engine或Java或HTMLUnit的任何经验.

我或许可以弄明白......如果我这样做,我会发布我的结果.

否则,我觉得这是一个很好的机会,有人写了一个踢屁股的博客文章,概述了一个新手一步一步的指导,以建立这样的网络服务.

这将为更优秀(和免费!)的Google …

java ajax seo google-app-engine htmlunit

14
推荐指数
1
解决办法
3272
查看次数

无法关闭HtmlUnit日志记录消息

我正在使用HtmlUnit与通过Ajax与服务器交互的网页进行交互.在Ajax代码启动后不久,HtmlUnit会生成以下两条日志消息:

WARNING: Ignoring XMLHttpRequest.setRequestHeader for Content-length: it is a restricted header
Mar 3, 2011 3:32:47 PM com.gargoylesoftware.htmlunit.javascript.host.xml.XMLHttpRequest jsxFunction_setRequestHeader
WARNING: Ignoring XMLHttpRequest.setRequestHeader for Connection: it is a restricted header
Mar 3, 2011 3:32:47 PM com.gargoylesoftware.htmlunit.javascript.host.xml.XMLHttpRequest jsxGet_status

......接着是这个消息,重复了六次:

SEVERE: XMLHttpRequest.status was retrieved before the response was available.
Mar 3, 2011 3:32:47 PM com.gargoylesoftware.htmlunit.javascript.host.xml.XMLHttpRequest jsxGet_status

我无法弄清楚如何关闭这些消息.浏览代码表明它们是通过直接调用记录器产生的,而不是通过我可以提供无操作实现的处理程序对象产生的,正如我已经为CSS错误所做的那样.该的HtmlUnit登录页面中显示,添加此代码应工作:

System.getProperties().put("org.apache.commons.logging.simplelog.defaultlog", "fatal");
Run Code Online (Sandbox Code Playgroud)

......但它没有效果.我还尝试在调用java时添加以下选项:

-Dorg.apache.commons.logging.simplelog.defaultlog=fatal
Run Code Online (Sandbox Code Playgroud)

......但这也没有效果.

我想我可以在执行此代码时将stderr重定向到/ dev/null,但是可用的hacky解决方案是什么?

logging htmlunit

14
推荐指数
3
解决办法
1万
查看次数

HtmlUnit,如何在不单击提交按钮的情况下发布表单?

我知道在HtmlUnit中我可以fireEvent在表单上提交,它将被发布.但是如果我禁用了javascript并想使用一些内置函数发布表单呢?

我已经检查了javadoc并且没有找到任何方法来做到这一点.奇怪的是HtmlForm中没有这样的功能......


我在htmlunit页面上阅读了javadoc和教程,我知道我可以使用getInputByName()并点击它.BuT有时会有没有提交类型按钮的表单,甚至有这样的按钮但没有name属性.

我在这种情况下寻求帮助,这就是我使用的原因,fireEvent但它并不总是有效.

java htmlunit

14
推荐指数
3
解决办法
2万
查看次数

使用htmlunit -Java访问Javascript生成的html

我试图能够测试一个使用javascript来呈现大部分HTML的网站.使用HTMLUNIT浏览器,您如何能够访问由javascript生成的html?我正在浏览他们的文档,但不确定最佳方法是什么.

WebClient webClient = new WebClient();
HtmlPage currentPage = webClient.getPage("some url");
String Source = currentPage.asXml();
System.out.println(Source);
Run Code Online (Sandbox Code Playgroud)

这是一个简单的方法来获取页面的HTML,但你会使用domNode或其他方式来访问javascript生成的HTML吗?

javascript java html-parsing htmlunit

13
推荐指数
2
解决办法
1万
查看次数

HTMLUnit:大量过时的内容并且无法在getPage()上创建对象警告然后在getByXPath()上调用setOuterHTML的异常失败

我正在尝试HTMLUnit来自动从webapp下载数据.但是,我在getPage()上得到了一大堆警告(大多数似乎处理我认为我甚至不需要的链接脚本)然后是一个致命的com.gargoylesoftware.htmlunit.ScriptException:异常调用setOuterHTML时我尝试运行getByXPath来提取我正在寻找的数据.从我得到的错误中,我不能为我的生活找出正在发生的事情.你们有什么想法吗?

这是我的代码:

import java.util.List;

import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.html.HtmlAnchor;
import com.gargoylesoftware.htmlunit.html.HtmlPage;

public class ScrapperApp {

    private static void go() throws Exception {
        HtmlPage nextPage;
        String url = "http://media.ethics.ga.gov/search/Campaign/Campaign_Name.aspx?NameID=5751&FilerID=C2009000085&Type=candidate";

        final WebClient webclient = new WebClient();
        final HtmlPage page = webclient.getPage(url);

        System.out.println("PULLING LINKS:");

        List<HtmlAnchor> articles = (List<HtmlAnchor>) page.getByXPath("//div[@class='hform1']/a[@class='lblentrylink']");

        /*for(int x=0; x<articles.size(); x++) {
            nextPage = articles.get(x).click();
            System.out.println(nextPage.getBody());
        }*/
    }

    public static void main(String[] args) throws Exception {
        go();
        System.out.println("COMPLETE");
    }

}
Run Code Online (Sandbox Code Playgroud)

这是我的控制台输出:

Jul 2, 2013 6:19:51 PM com.gargoylesoftware.htmlunit.IncorrectnessListenerImpl notify
WARNING: Obsolete …
Run Code Online (Sandbox Code Playgroud)

java htmlunit

13
推荐指数
1
解决办法
2万
查看次数

防止HtmlUnit 2.13执行JavaScript

这是获取页面的代码:

WebClient webClient = new WebClient();
HtmlPage page = webClient.getPage(url);
Run Code Online (Sandbox Code Playgroud)

问题是webClient总是自动执行javascript并抛出一个错误列表.我只想获得原始资源.如何防止它执行脚本?我发现版本2.9中有一种方法:

webClient.setJavaScriptEnabled(false);
Run Code Online (Sandbox Code Playgroud)

setJavaScriptEnabled()功能已被弃用.谁知道如何解决这个问题?请帮我.非常感谢.

html javascript java htmlunit

13
推荐指数
1
解决办法
7272
查看次数