有没有人得到HTMLUnit(或HtmlUnitDriver)来使用Android应用程序?
这是问题:我收到以下错误消息:
11-26 16:27:26.617: E/AndroidRuntime(1265): java.lang.NoClassDefFoundError: org/w3c/dom/css/CSSRule
这就是我所做的:我尝试添加对以下链接中列出的jar的引用(在Project Dependencies和Project Transitive Dependencies下 - 仅编译,不包括test jar):
http://htmlunit.sourceforge.net/dependencies.html
然而Eclipse一直在崩溃,然后我发现一些问题说Android SDK中已经包含了一些jar:
xalan, xercesImpl and xml-apis
HttpClient
所以我删除了对这些罐子的引用,只保留以下内容:
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
正是在这个时候,应用程序能够运行,但是当执行以下代码行时,我开始得到错误:
final WebClient webClient = new WebClient();
11-26 16:27:26.617: E/AndroidRuntime(1265): java.lang.NoClassDefFoundError: org/w3c/dom/css/CSSRule
我做了一个网络搜索,发现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
有人可以对此有所了解吗?
我正试图遍历一个网站,但在他们的一个页面上我收到此错误:
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)
无论如何我可以忽略这个错误吗?如果日历加载正确,我并不特别在意.
是否有可能教HTMLUnit忽略网页上的某些 JavaScript脚本/文件?其中一些只是我的控制(如jQuery),我不能对它们做任何事情.警告很烦人,例如:
[WARN] com.gargoylesoftware.htmlunit.javascript.host.html.HTMLDocument:
getElementById(script1299254732492) did a getElementByName for Internet Explorer
实际上我正在使用JSFUnit,HTMLUnit在它下面工作.
Python是否有提供JavaScript支持的屏幕抓取库?
我一直在使用pycurl来处理简单的HTML请求,而Java的HtmlUnit则用于需要JavaScript支持的更复杂的请求.
理想情况下,我希望能够完成Python的所有工作,但我没有遇到任何允许我这样做的库.它们存在吗?
现实问题:
我的应用程序托管在Heroku上,据我所知,他无法提供运行无头(无GUI)浏览器的解决方案 - 例如HTMLUnit - 用于为Googlebot 生成HTML快照以索引我的AJAX内容.
我建议的解决方案:
如果您还没有,我建议您阅读Google的"使AJAX应用程序可抓取的完整规范".
想象一下,我有:
http://example.comhttp://example.com#!tab=TabA&subtab=SubTab3客户端Javascript location.hash通过AJAX 获取并加载TabA,SubTab3内容.注意:Hash Bang(#!)是google规范的一部分.
我想在Google App Engine(GAE)上托管一个简单的"网络服务" :
http://htmlsnapshot.appspot.com?url=http://example.com#!tab=TabA&subtab=SubTab3(url param应为URLEncoded)http://example.com#!tab=TabA&subtab=SubTab3在服务器上打开并运行客户端javascript.我的http://example.com应用程序需要管理http://htmlsnapshot.appspot.com...基本上:
http://example.com/?_escaped_fragment_=tab=TabA%26subtab=SubTab3(googlebot抓取工具逃脱某些字符,例如%26 =&).http://htmlsnapshot.appspot.com?url=http://example.com#!tab=TabA&subtab=SubTab3(url param应为URLEncoded)我没有使用Google App Engine或Java或HTMLUnit的任何经验.
我或许可以弄明白......如果我这样做,我会发布我的结果.
否则,我觉得这是一个很好的机会,有人写了一个踢屁股的博客文章,概述了一个新手一步一步的指导,以建立这样的网络服务.
这将为更优秀(和免费!)的Google …
我正在使用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");
......但它没有效果.我还尝试在调用java时添加以下选项:
-Dorg.apache.commons.logging.simplelog.defaultlog=fatal
......但这也没有效果.
我想我可以在执行此代码时将stderr重定向到/ dev/null,但是可用的hacky解决方案是什么?
我知道在HtmlUnit中我可以fireEvent在表单上提交,它将被发布.但是如果我禁用了javascript并想使用一些内置函数发布表单呢?
我已经检查了javadoc并且没有找到任何方法来做到这一点.奇怪的是HtmlForm中没有这样的功能......
我在htmlunit页面上阅读了javadoc和教程,我知道我可以使用getInputByName()并点击它.BuT有时会有没有提交类型按钮的表单,甚至有这样的按钮但没有name属性.
我在这种情况下寻求帮助,这就是我使用的原因,fireEvent但它并不总是有效.
我试图能够测试一个使用javascript来呈现大部分HTML的网站.使用HTMLUNIT浏览器,您如何能够访问由javascript生成的html?我正在浏览他们的文档,但不确定最佳方法是什么.
WebClient webClient = new WebClient();
HtmlPage currentPage = webClient.getPage("some url");
String Source = currentPage.asXml();
System.out.println(Source);
这是一个简单的方法来获取页面的HTML,但你会使用domNode或其他方式来访问javascript生成的HTML吗?
我正在尝试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");
    }
}
这是我的控制台输出:
Jul 2, 2013 6:19:51 PM com.gargoylesoftware.htmlunit.IncorrectnessListenerImpl notify
WARNING: Obsolete …这是获取页面的代码:
WebClient webClient = new WebClient();
HtmlPage page = webClient.getPage(url);
问题是webClient总是自动执行javascript并抛出一个错误列表.我只想获得原始资源.如何防止它执行脚本?我发现版本2.9中有一种方法:
webClient.setJavaScriptEnabled(false);
但setJavaScriptEnabled()功能已被弃用.谁知道如何解决这个问题?请帮我.非常感谢.