【问题标题】:HTMLUnit - Clicking on link does not workHTMLUnit - 单击链接不起作用
【发布时间】:2016-02-15 13:05:13
【问题描述】:

目标:使用 HTMLUnit 和 Java 访问网页并自动点击链接

我尝试了什么:尝试点击 google.com 网站上的“关于”链接。

代码:

import java.io.IOException;
import java.net.URISyntaxException;
import java.net.URL;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlAnchor;
import com.gargoylesoftware.htmlunit.html.HtmlPage;

public class autoPEC {
    public static void main(String[] args) throws IOException, URISyntaxException{
        WebClient webClient = new WebClient();
        HtmlPage currentPage = webClient.getPage("http://www.google.com/");
        HtmlAnchor advancedSearchAn = currentPage.getAnchorByText("About");
        currentPage = advancedSearchAn.click(); 
    }
}

结果:错误

2016 年 1 月 15 日上午 10:17:15 com.gargoylesoftware.htmlunit.javascript.host.html.HTMLElement jsxFunction_addBehavior 警告:未实现的行为:#default#userdata 2016 年 1 月 15 日上午 10:17:15 com.gargoylesoftware.htmlunit.DefaultCssErrorHandler 错误 警告:CSS 错误:[1:546] 表达式错误。无效标记“=”。期待以下之一: , , "/", , "-", , , ")", , "inherit", , , , , , , , , , , , , , , , , , , , . 2016 年 1 月 15 日上午 10:17:15 com.gargoylesoftware.htmlunit.DefaultCssErrorHandler 错误 警告:CSS 错误:[1:552] 样式规则错误。无效的令牌“位置”。期待以下之一:“}”,“;”。 2016 年 1 月 15 日上午 10:17:15 com.gargoylesoftware.htmlunit.DefaultCssErrorHandler 警告 警告:CSS 警告:[1:552] 忽略此规则中的以下声明。 2016 年 1 月 15 日上午 10:17:15 com.gargoylesoftware.htmlunit.DefaultCssErrorHandler 错误 警告:CSS 错误:[1:859] 表达式错误。无效标记“=”。期待以下之一: , , "/", , "-", , , ")", , "inherit", , , , , , , , , , , , , , , , , , , , . 2016 年 1 月 15 日上午 10:17:15 com.gargoylesoftware.htmlunit.DefaultCssErrorHandler 错误 警告:CSS 错误:[1:1419] 样式规则错误。令牌无效 ”:”。期待以下之一: , "}", , ";", "/", , "-", , , , "!", "inherit", , , , , , , , , , , , , , , , , , , , . 2016 年 1 月 15 日上午 10:17:15 com.gargoylesoftware.htmlunit.DefaultCssErrorHandler 警告 警告:CSS 警告:[1:1419] 忽略此规则中的以下声明。 2016 年 1 月 15 日上午 10:17:15 com.gargoylesoftware.htmlunit.DefaultCssErrorHandler 错误 警告:CSS 错误:[1:2203] 样式规则错误。无效的令牌“”。期待以下之一:,“}”,“;”,。 2016 年 1 月 15 日上午 10:17:15 com.gargoylesoftware.htmlunit.DefaultCssErrorHandler 警告 警告:CSS 警告:[1:2203] 忽略此规则中的以下声明。 2016 年 1 月 15 日上午 10:17:15 com.gargoylesoftware.htmlunit.DefaultCssErrorHandler 错误 警告:CSS 错误:[1:2543] 样式规则错误。无效的令牌“”。期待以下之一:,“}”,“;”,。 2016 年 1 月 15 日上午 10:17:15 com.gargoylesoftware.htmlunit.DefaultCssErrorHandler 警告 警告:CSS 警告:[1:2543] 忽略此规则中的以下声明。 2016 年 1 月 15 日上午 10:17:15 com.gargoylesoftware.htmlunit.DefaultCssErrorHandler 错误 警告:CSS 错误:[1:2616] 样式规则错误。无效的令牌“”。期待以下之一:,“}”,“;”,。 2016 年 1 月 15 日上午 10:17:15 com.gargoylesoftware.htmlunit.DefaultCssErrorHandler 警告 警告:CSS 警告:[1:2616] 忽略此规则中的以下声明。 2016 年 1 月 15 日上午 10:17:15 com.gargoylesoftware.htmlunit.DefaultCssErrorHandler 错误 警告:CSS 错误:[1:3194] 样式规则错误。无效的令牌“”。期待以下之一:,“}”,“;”,。 2016 年 1 月 15 日上午 10:17:15 com.gargoylesoftware.htmlunit.DefaultCssErrorHandler 警告 警告:CSS 警告:[1:3194] 忽略此规则中的以下声明。 2016 年 1 月 15 日上午 10:17:15 com.gargoylesoftware.htmlunit.DefaultCssErrorHandler 错误 警告:CSS 错误:[1:3701] 样式规则错误。无效的令牌“”。期待以下之一:,“}”,“;”,。 2016 年 1 月 15 日上午 10:17:15 com.gargoylesoftware.htmlunit.DefaultCssErrorHandler 警告 警告:CSS 警告:[1:3701] 忽略此规则中的以下声明。 2016 年 1 月 15 日上午 10:17:15 com.gargoylesoftware.htmlunit.DefaultCssErrorHandler 错误 警告:CSS 错误:[1:3761] 样式规则错误。无效的令牌“”。期待以下之一:,“}”,“;”,。 2016 年 1 月 15 日上午 10:17:15 com.gargoylesoftware.htmlunit.DefaultCssErrorHandler 警告 警告:CSS 警告:[1:3761] 忽略此规则中的以下声明。 2016 年 1 月 15 日上午 10:17:15 com.gargoylesoftware.htmlunit.DefaultCssErrorHandler 错误 警告:CSS 错误:[1:4196] 样式规则错误。无效的令牌“”。期待以下之一:,“}”,“;”,。 2016 年 1 月 15 日上午 10:17:15 com.gargoylesoftware.htmlunit.DefaultCssErrorHandler 警告 警告:CSS 警告:[1:4196] 忽略此规则中的以下声明。 2016 年 1 月 15 日上午 10:17:15 com.gargoylesoftware.htmlunit.DefaultCssErrorHandler 错误 警告:CSS 错误:[1:4960] 样式规则错误。无效的令牌“”。期待以下之一:,“}”,“;”,。 2016 年 1 月 15 日上午 10:17:15 com.gargoylesoftware.htmlunit.DefaultCssErrorHandler 警告 警告:CSS 警告:[1:4960] 忽略此规则中的以下声明。 2016 年 1 月 15 日上午 10:17:15 com.gargoylesoftware.htmlunit.DefaultCssErrorHandler 错误 警告:CSS 错误:[1:5610] 伪类或元素中的错误。令牌无效 ”:”。期待其中之一: , 。 2016 年 1 月 15 日上午 10:17:15 com.gargoylesoftware.htmlunit.DefaultCssErrorHandler 警告 警告:CSS 警告:[1:5610] 忽略整个规则。 2016 年 1 月 15 日上午 10:17:15 com.gargoylesoftware.htmlunit.DefaultCssErrorHandler 错误 警告:CSS 错误:[1:6103] 样式规则错误。无效的令牌“”。期待以下之一:,“}”,“;”,。 2016 年 1 月 15 日上午 10:17:15 com.gargoylesoftware.htmlunit.DefaultCssErrorHandler 警告 警告:CSS 警告:[1:6103] 忽略此规则中的以下声明。 2016 年 1 月 15 日上午 10:17:15 com.gargoylesoftware.htmlunit.DefaultCssErrorHandler 错误 警告:CSS 错误:[1:6338] 样式规则错误。无效的令牌“”。期待以下之一:,“}”,“;”,。 2016 年 1 月 15 日上午 10:17:15 com.gargoylesoftware.htmlunit.DefaultCssErrorHandler 警告 警告:CSS 警告:[1:6338] 忽略此规则中的以下声明。 2016 年 1 月 15 日上午 10:17:15 com.gargoylesoftware.htmlunit.DefaultCssErrorHandler 错误 警告:CSS 错误:[1:6593] 表达式错误。无效标记“=”。期待以下之一: , , "/", , "-", , , ")", , "inherit", , , , , , , , , , , , , , , , , , , , . 2016 年 1 月 15 日上午 10:17:15 com.gargoylesoftware.htmlunit.DefaultCssErrorHandler 错误 警告:CSS 错误:[1:6781] 样式规则错误。无效的令牌“”。期待以下之一:,“}”,“;”,。 2016 年 1 月 15 日上午 10:17:15 com.gargoylesoftware.htmlunit.DefaultCssErrorHandler 警告 警告:CSS 警告:[1:6781] 忽略此规则中的以下声明。 2016 年 1 月 15 日上午 10:17:15 com.gargoylesoftware.htmlunit.DefaultCssErrorHandler 错误 警告:CSS 错误:[1:6938] 样式规则错误。无效的令牌“”。期待以下之一:,“}”,“;”,。 2016 年 1 月 15 日上午 10:17:15 com.gargoylesoftware.htmlunit.DefaultCssErrorHandler 警告 警告:CSS 警告:[1:6938] 忽略此规则中的以下声明。 2016 年 1 月 15 日上午 10:17:15 com.gargoylesoftware.htmlunit.DefaultCssErrorHandler 错误 警告:CSS 错误:[1:7010] 样式规则错误。无效的令牌“”。期待以下之一:,“}”,“;”,。 2016 年 1 月 15 日上午 10:17:15 com.gargoylesoftware.htmlunit.DefaultCssErrorHandler 警告 警告:CSS 警告:[1:7010] 忽略此规则中的以下声明。 2016 年 1 月 15 日上午 10:17:15 com.gargoylesoftware.htmlunit.DefaultCssErrorHandler 错误 警告:CSS 错误:[1:7352] 样式规则错误。无效的令牌“”。期待以下之一:,“}”,“;”,。 2016 年 1 月 15 日上午 10:17:15 com.gargoylesoftware.htmlunit.DefaultCssErrorHandler 警告 警告:CSS 警告:[1:7352] 忽略此规则中的以下声明。 2016 年 1 月 15 日上午 10:17:15 com.gargoylesoftware.htmlunit.DefaultCssErrorHandler 错误 警告:CSS 错误:[2:199] 样式规则错误。令牌无效 ”*”。期待以下之一:,“}”,“;”,。 2016 年 1 月 15 日上午 10:17:15 com.gargoylesoftware.htmlunit.DefaultCssErrorHandler 警告 警告:CSS 警告:[2:199] 忽略此规则中的以下声明。 2016 年 1 月 15 日上午 10:17:15 com.gargoylesoftware.htmlunit.DefaultCssErrorHandler 错误 警告:CSS 错误:[2:1082] 伪类或元素中的错误。令牌无效 ”:”。期待其中之一: , 。 2016 年 1 月 15 日上午 10:17:15 com.gargoylesoftware.htmlunit.DefaultCssErrorHandler 警告 警告:CSS 警告:[2:1082] 忽略整个规则。 2016 年 1 月 15 日上午 10:17:15 com.gargoylesoftware.htmlunit.DefaultCssErrorHandler 错误 警告:CSS 错误:[2:1691] 样式规则错误。令牌无效 ”:”。期待以下之一: , "}", , ";", "/", , "-", , , , "!", "inherit", , , , , , , , , , , , , , , , , , , , . 2016 年 1 月 15 日上午 10:17:15 com.gargoylesoftware.htmlunit.DefaultCssErrorHandler 警告 警告:CSS 警告:[2:1691] 忽略此规则中的以下声明。 2016 年 1 月 15 日上午 10:17:15 com.gargoylesoftware.htmlunit.DefaultCssErrorHandler 错误 警告:CSS 错误:[1:685] 样式规则错误。令牌无效 ”:”。期待以下之一: , "}", , ";", "/", , "-", , , , "!", "inherit", , , , , , , , , , , , , , , , , , , , . 2016 年 1 月 15 日上午 10:17:15 com.gargoylesoftware.htmlunit.DefaultCssErrorHandler 警告 警告:CSS 警告:[1:685] 忽略此规则中的以下声明。 2016 年 1 月 15 日上午 10:17:15 com.gargoylesoftware.htmlunit.javascript.host.html.HTMLElement jsxFunction_addBehavior 警告:未实现的行为:#default#userdata 线程“主”com.gargoylesoftware.htmlunit.ElementNotFoundException 中的异常:elementName=[a] attributeName=[] attributeValue=[About] 在 com.gargoylesoftware.htmlunit.html.HtmlPage.getAnchorByText(HtmlPage.java:550) 在 autoPEC.main(autoPEC.java:12)

问题:谁能告诉我我做错了什么以及如何纠正? 请注意,我是 HTMLUnit 的新手

【问题讨论】:

    标签: java html htmlunit


    【解决方案1】:

    在为 WebClient 创建新实例后添加以下行来禁用 javascript。

    webClient.getOptions().setJavaScriptEnabled(false);

    然后再试一次。这应该可以。

    【讨论】:

    • 嗨!感谢您的建议,但是当我在为 WebClient 创建新实例之后放置此行时,getOptions() 方法带有下划线,因为它对于 WebClient 类型未定义。你能帮忙吗?谢谢
    【解决方案2】:

    您需要为您的 WebClient 构造函数指定一个浏览器,否则您将无法连接到该页面。添加此代码(指定浏览器并删除 HtmlUnit 日志):

    LogFactory.getFactory().setAttribute("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.NoOpLog");
    
    java.util.logging.Logger.getLogger("com.gargoylesoftware").setLevel(Level.OFF); 
    java.util.logging.Logger.getLogger("org.apache.commons.httpclient").setLevel(Level.OFF);
    
    WebClient webClient = new WebClient(BrowserVersion.CHROME);
    webClient.getOptions().setJavaScriptEnabled(true);
    webClient.getOptions().setThrowExceptionOnScriptError(false);
    webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
    
    HtmlPage currentPage = webClient.getPage("http://www.google.com/");
    HtmlAnchor advancedSearchAn = currentPage.getAnchorByText("About");
    currentPage = advancedSearchAn.click(); 
    

    【讨论】:

      猜你喜欢
      • 2016-08-18
      • 2014-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-13
      • 2016-01-02
      • 2016-05-18
      • 1970-01-01
      相关资源
      最近更新 更多