标签: htmlunit

在HtmlUnit库中打开SSL Web浏览器连接

我在这个问题上通过网络搜索了几个小时,我找到的答案都没有真正适合我的问题,所以这就是我,在SOF中问我的第一个问题.

所以,我正在尝试使用htmlunit库从java程序打开Web浏览器.我需要连接的网站需要SSL连接,证书存储在USB密钥中.它的iKey2023产品.

系统曾经工作(我没有写),但USB密钥中的一个证书已过期,因此它自动转移到下一个(共有4个证书),它突然停止工作.

它给了我javax.net.ssl.SSLPeerUnverifiedException:peer not authenticated error.

我现在回到家了,我忘记了方法的确切名称,但我记得以下内容.

  1. 使用IE8创建浏览器实例

  2. 调用了browser.setWebConnection方法.根据API,此方法是内部API.

  3. 通过传递URL作为参数来建立与网站的连接

它在第3步抛出异常.

更多细节.小细节可能不正确,但我试图描述一幅大图.在步骤2,该方法将WebConnection对象作为参数,并且存在该接口的实现.在此实现中,使用sun.security.pkcs11.SunPKCS11(configFileInputStream)创建密钥库(我拼写正确吗?)

它是这样的.

Provider p = new sun.security.pkcs11.SunPKCS11(configFileInputStream); Security.addProvider(P);

并从此提供程序创建密钥库.

在WebConnection实现中使用此密钥库,它会创建一个SSLSocket.

因此,在证书切换到新证书后,它没有正确地获取证书.

这是我尝试过的.

  1. 我试图在htmlunit库中使用不同的方法,比如setSecurityProvider,我试图将Provider对象创建在上面的代码片段中.我得到了阶级演员异常.

  2. 我试图手动设置系统属性(trustStore,trustStorePassword,keyStore等).为了做到这一点,我想从USB密钥导出证书,但它不允许我从中导出私钥,所以我无法真正创建一个有效的PKCS12文件(openSSL想要私有)密钥文件和.pem文件进行转换,我没有那个密钥文件).

他们没有工作,我现在很困难.

ssl certificate htmlunit

4
推荐指数
1
解决办法
4325
查看次数

下载文件后,HtmlUnit无法检索页面

我在Java中遇到了HtmlUnit这个奇怪的问题.我用它来从网站下载一些数据,过程是这样的:

1 - 登录

2 - 每个元素(汽车)

----- 3搜索汽车

----- 4从链接下载zip文件

代码:

创建webclient:

webClient = new WebClient(BrowserVersion.FIREFOX_3_6);
webClient.setJavaScriptEnabled(true);
webClient.setThrowExceptionOnScriptError(false);
DefaultCredentialsProvider provider = new DefaultCredentialsProvider();
provider.addCredentials(USERNAME, PASSWORD);
webClient.setCredentialsProvider(provider);
webClient.setRefreshHandler(new ImmediateRefreshHandler());
Run Code Online (Sandbox Code Playgroud)

登录:

  public void login() throws IOException
  {
    page = (HtmlPage) webClient.getPage(URL);
    HtmlForm form = page.getFormByName("formLogin");

    String user = USERNAME;
    String password = PASSWORD;

    // Enter login and password
    form.getInputByName("LoginSteps$UserName").setValueAttribute(user);
    form.getInputByName("LoginSteps$Password").setValueAttribute(password);

    // Click Login Button
    page = (HtmlPage) form.getInputByName("LoginSteps$LoginButton").click();

    webClient.waitForBackgroundJavaScript(3000);

    // Click on Campa area
    HtmlAnchor link = (HtmlAnchor) page.getElementById("ctl00_linkCampaNoiH");
    page = …
Run Code Online (Sandbox Code Playgroud)

java htmlunit

4
推荐指数
1
解决办法
4394
查看次数

使用HtmlUnit读取所有响应头

我试图使用http单元为我的应用程序读取响应标头 -

WebClient webClient = new WebClient();
WebClient.setThrowExceptionOnScriptError(false);
HtmlPage currentPage = webClient.getPage("http://myapp.com");
WebResponse response = currentPage.getWebResponse();
System.out.println(response.getResponseHeaders());  
Run Code Online (Sandbox Code Playgroud)

我确实看到了响应头但它们仅限于第一个http get请求.当我使用LiveHTTPHeaders插件for firefox插件时,我得到了所有获取请求和相应的标头响应.

有没有办法为所有后续请求获取http标头,而不仅限于第一次获取?

java htmlunit

4
推荐指数
1
解决办法
6386
查看次数

什么会导致HtmlUnit抛出40多个异常并在我尝试使用javascript加载页面时失败?

我正试图从历史书的网站上搜集练习测验,这样我就可以将它们组合成一个大的测试来学习.

页面在这里.

这一切都是由javascript,所以我试图HtmlUnit用来刮页.

我更像是一个Python人,因此我将初始代码设置为非常接近HtmlUnit的入门部分:

import com.gargoylesoftware.htmlunit.*;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;

public class HelloWorld {
    public static void main(String[] args) throws Exception {
        homePage();
        System.out.println("Done.");
    }

    public static void homePage() throws Exception {
        final WebClient webClient = new WebClient();

        String url = "http://www.wwnorton.com/college/polisci/we-the-people8/shorter/ch/15/quiz.aspx";

        final HtmlPage page = webClient.getPage(url);

        System.out.println(page.asText());
        webClient.closeAllWindows();
    }
}
Run Code Online (Sandbox Code Playgroud)

在运行时,我得到以下打印输出:2013年4月27日下午12:50:16

com.gargoylesoftware.htmlunit.IncorrectnessListenerImpl notify
WARNING: Obsolete content type encountered: 'application/x-javascript'.
Apr 27, 2013 12:50:16 PM com.gargoylesoftware.htmlunit.IncorrectnessListenerImpl notify
WARNING: Obsolete content type encountered: 'application/x-javascript'.
Apr …
Run Code Online (Sandbox Code Playgroud)

java htmlunit

4
推荐指数
1
解决办法
6787
查看次数

HtmlUnit不创建HtmlPage对象

我是HtmlUnit的新手,我正在尝试抓取一个使用Javascript编辑代码的网站。我听说HtmlUnit是最好的方法,因为它使用无头浏览器返回最终代码。

但是,正如您将看到的那样,我什至无法创建一个HtmlPage对象,而不会抛出一个巨大且无法理解的异常(至少考虑到我对HtmlUnit几乎为空的经验)。

这是我的代码:

import com.gargoylesoftware.htmlunit.*;
import com.gargoylesoftware.htmlunit.html.HtmlPage;

public class Main {

    public static void main(String[] args) {
        Main scraper = new Main();
        scraper.testingGargoyle();


    }

    private void testingGargoyle() {
        String myUrl = "https://www.wearvr.com/#game_id=game_4";
        WebClient webClient = new WebClient();
        try {
            HtmlPage myPage = ((HtmlPage) webClient.getPage(myUrl));
        } catch (FailingHttpStatusCodeException | IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是抛出的异常:

Apr 30, 2015 5:43:50 PM com.gargoylesoftware.htmlunit.IncorrectnessListenerImpl notify
WARNING: Obsolete content type encountered: 'application/x-javascript'.
Apr 30, …
Run Code Online (Sandbox Code Playgroud)

html javascript htmlunit web-scraping headless-browser

4
推荐指数
1
解决办法
3607
查看次数

Java HtmlUnit onchange事件未触发

我使用HtmlUnit填写表单.我有一个选择SELECT_A.选择选项后,其他元素必须出现在页面中.但它不起作用!我模拟Firefox 3.6.

你怎么看?

我尝试使用,NicelyResynchronizingAjaxController()但它没有帮助.

谢谢!

java apache-commons htmlunit dom-events

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

如何使用HtmlUnit获取HTML页面

我知道你可能认为这个问题很愚蠢,但我需要使用HtmlUnit.但是,它以XML或文本形式返回页面.

我不知道如何获得纯HTML(与浏览器返回的源代码相同)

我需要这个,因为我需要使用一些书面模块.有任何想法吗?

java htmlunit

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

htmlunit:指定了无效或非法的选择器

我试图用htmlunit模拟登录.虽然我根据例子编写了我的代码,但我遇到了一个无聊的问题.以下是我从控制台中获取的一些消息.

runtimeError: message=[An invalid or illegal selector was specified (selector: '*,:x'         error: Invalid selector: *:x).] sourceName=[http://user.mofangge.com/Scripts/inc/jquery-1.10.2.js] line=[1640] lineSource=[null] lineOffset=[0]

WARNING: Obsolete content type encountered: 'application/x-javascript'.

CSS error: 'http://user.mofangge.com/Content/Css/Style1/Main.css' [1:1] Error in style sheet. (Invalid token "\u9518". Was expecting one of: <EOF>, <S>, <IDENT>, "<!--", "-->", <HASH>, <IMPORT_SYM>, <PAGE_SYM>, <MEDIA_SYM>, <FONT_FACE_SYM>, <CHARSET_SYM>, ".", ":", "*", "[", <ATKEYWORD>.)

Aug 11, 2014 1:43:27 ?? com.gargoylesoftware.htmlunit.DefaultCssErrorHandler error

CSS error: 'http://user.mofangge.com/Content/Css/Style1/Login.css' [1:1] Error in style sheet. (Invalid token "\u9518". Was expecting one of: <EOF>, <S>, …
Run Code Online (Sandbox Code Playgroud)

javascript css java web-crawler htmlunit

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

如何使用HtmlUnit处理太多的重定向

我试图解析一个网站,但我遇到了一个Too much redirect例外.这是我的代码:

WebClient client = new WebClient(BrowserVersion.FIREFOX_24);
HtmlPage homePage = null;
String url = "http://www.freelake.org/pages/Freetown-Lakeville_RSD/Departments/Director_of_Financial_Operatio";
try {
    client.getOptions().setUseInsecureSSL(true);
    client.setAjaxController(new NicelyResynchronizingAjaxController());
    client.getOptions().setThrowExceptionOnFailingStatusCode(false);
    client.getOptions().setThrowExceptionOnScriptError(false);
    client.waitForBackgroundJavaScript(30000);
    client.waitForBackgroundJavaScriptStartingBefore(30000);
    client.getOptions().setCssEnabled(false);
    client.getOptions().setJavaScriptEnabled(true);
    client.getOptions().setRedirectEnabled(true);
    homePage = client.getPage(url);
    synchronized (homePage) {
        homePage.wait(25000);
    }
    System.out.println(homePage.asXml());
} catch (Exception e) {
    e.printStackTrace();
}        
Run Code Online (Sandbox Code Playgroud)

以下提到例外情况

com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException: Too much redirect for http://www.freelake.org/resolver/2345183424.20480.0000/route.00/pages/Freetown-Lakeville_RSD/Departments/Director_of_Financial_Operatio
at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseFromWebConnection(WebClient.java:1353)
at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseFromWebConnection(WebClient.java:1371)
Run Code Online (Sandbox Code Playgroud)

有什么方法可以解决这个问题吗?

java htmlunit

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

如何将Cookie添加到HtmlUnit请求标头?

我正在尝试访问某个网站,但我无法将收集的"Cookie"添加到传出的POST请求标头中.我已经能够验证它们是否存在于CookieManager中.

任何替代HtmlUnit的方法也将受到赞赏.

public static void main( String[] args )
    {
        // Turn off logging to prevent polluting the output.
        Logger.getLogger("com.gargoylesoftware.htmlunit").setLevel(Level.OFF);

        try {
            final WebClient webClient = new WebClient(BrowserVersion.CHROME);



            webClient.getOptions().setCssEnabled(false);


            CookieManager cookieManager = webClient.getCookieManager();

            out.println(cookieManager.getCookies().toString());

            out.println("start");

            final HtmlPage loginPage = webClient.getPage("my_url");


            Map<?, ?> additionalRequest1 = loginPage.getWebResponse().getWebRequest().getAdditionalHeaders();

            Iterator<?> ite0 = additionalRequest1.entrySet().iterator();
             while(ite0.hasNext()){
                 out.println(ite0.next());
             }
             out.println("\n");

            out.println("after loginPage");



            out.println(cookieManager.getCookies().toString());

            Set<Cookie> cookies = new HashSet<Cookie>();
            cookies.addAll(webClient.getCookieManager().getCookies());
            StringBuilder cookieHeader = new StringBuilder();

            Iterator<Cookie> ite = cookies.iterator();
            while (ite.hasNext()){
                Cookie cookie = ite.next();
                cookie.getDomain().substring(1);
                String name …
Run Code Online (Sandbox Code Playgroud)

java htmlunit

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