【问题标题】:Java HtmlUnit webpage scraper newPage not accessibleJava HtmlUnit 网页抓取工具 newPage 无法访问
【发布时间】:2014-11-05 23:52:39
【问题描述】:

我正在为页面dscan.me 编写刮板。它应该用内容填写表单并使用提交输入按钮提交。我在这里没有看到任何问题,但我已经尝试了我所知道的关于 HtmlUnit 的所有内容(这还不算太多)。触发提交事件,执行 javascripts 并从结果中获取新页面......没有任何效果。 如果有更多经验的人在这里发布工作解决方案,我会很高兴。

这就是我在 textArea 中获取控件和设置数据的方式

HtmlForm form = page.getForms().get(0);
HtmlTextArea textArea = form.getTextAreaByName("scandata");
HtmlSubmitInput button = form.getInputByValue("Submit");

textArea.setText(paste);

我确定我有正确的控件并且 textArea 被填充,但这只是在 getNewPage() 调用上以 nullpointer 异常终止

ScriptResult scriptResult = button.fireEvent(Event.TYPE_SUBMIT);

WebClientProvider.getSharedClient().waitForBackgroundJavaScript(10000);

HtmlPage res = (HtmlPage) scriptResult.getNewPage();

这给了我作为结果页面的带有控件的默认页面......而不是处理内容的页面

String js_set = "$(\".inputbox\").val(\""+ paste.replaceAll("\n", "\\n").replaceAll("\t", "\\t") +"\");\n";     
String js_submit = "$(\".submitbutton\").click();";         
ScriptResult result = page.executeJavaScript(js_submit);
WebClientProvider.getSharedClient().waitForBackgroundJavaScript(10000);

HtmlPage res = (HtmlPage) scriptResult.getNewPage();

这是example 的数据,您可以将其粘贴到dscan.me 以查看工作流程。如果您有想法或找到一些解决方案或解决方法,我会为任何事情感到高兴。谢谢!

【问题讨论】:

    标签: java javascript jquery html htmlunit


    【解决方案1】:

    有时候JS需要时间执行,所以你必须等待执行,最好是重试一段时间直到页面没有更新(使用任何条件)这里是代码示例

    HtmlForm form = page.getForms().get(0);
    HtmlTextArea textArea = form.getTextAreaByName("scandata");
    HtmlSubmitInput button = form.getInputByValue("Submit");
    HtmlPage res = button.click();
    int input_length = page.getByXPath("//input").size();
    int tries = 5; 
    while (tries > 0 && input_length < 12) { //you can change number of tries and condition according to your need
        tries--;
        synchronized (page) {
            page.wait(2000); //wait
        }
        input_length = page.getByXPath("//input").size(); //input length is example of condtion
    }
    

    【讨论】:

    • 它绝对需要像你这样的方法。当您发布答案时,我刚刚弄清楚如何仅使用 js 命令。该页面需要一些时间来计算表单后面的所有内容,并且等待是适当的。很少的代码行让我很难过。谢谢你的建议!我会尽快发布解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-25
    • 2012-08-20
    • 1970-01-01
    • 2015-07-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多