【问题标题】:HtmlUnit does not find the elementHtmlUnit 没有找到元素
【发布时间】:2013-11-13 23:19:16
【问题描述】:

我正在尝试从页面墙上获取以u_0_1e 作为 id 的文本框,但 HtmlUnit 没有找到任何内容。最后一行打印null。 代码如下:

java.util.logging.Logger.getLogger("com.gargoylesoftware").setLevel(java.util.logging.Level.OFF);

        WebClient client = new WebClient(BrowserVersion.CHROME);
        JavaScriptEngine engine = new JavaScriptEngine(client);

        client.setJavaScriptEngine(engine);
        HtmlPage home = client.getPage("https://www.facebook.com/login.php");
        HtmlSubmitInput login = (HtmlSubmitInput) home.getElementById("u_0_1");
        HtmlTextInput name = (HtmlTextInput) home.getElementById("email");
        HtmlPasswordInput pass = (HtmlPasswordInput) home.getElementById("pass");

        name.setValueAttribute("myname");
        pass.setValueAttribute("mypass");

        HtmlPage page = login.click();
        HtmlPage wall = client.getPage("https://www.facebook.com/");

        System.out.println(wall.getElementById("u_0_1e"));

【问题讨论】:

    标签: java html facebook htmlunit


    【解决方案1】:

    我有一些关于你的问题的问题。

    首先,您禁用了 HtmlUnit 的日志记录。因此,如果您有任何 JavaScript 问题,那么您将不会看到它。如果您确实遇到了 JavaScript 错误,那么 JavaScript 代码将不会被完全执行。如果您尝试获取的元素是从服务器动态获取的(可能使用 AJAX),那么 JavaScript 错误(如果有)可能会导致该元素未被获取。

    如果您是网页抓取,显然是这种情况,那么您对 ​​JS 没有任何控制权,因此您只能接受它不工作或禁用 JS 并手动处理 AJAX 请求。

    当然,您会看到页面在真实浏览器上完美运行,但考虑到 HtmlUnit 使用的 JavaScript 引擎与真实浏览器不同。

    其次,包含单词engine 的两行绝对不需要。

    第三,正如我在你上一个问题中提到的,这将更适合通过Facebook API来处理。

    最后,您可能会发现这个其他答案很有用: JavaScript not being properly executed in HtmlUnit

    【讨论】:

    • 我将 BrowserVersion 更改为默认版本(或 Internet Explorer),现在它可以工作了!谢谢!
    猜你喜欢
    • 2021-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多