标签: htmlunit

HtmlUnit无法登录它在表单提交后返回相同的页面

我试图在HtmlUnit的帮助下登录这个网站,但点击登录后返回相同的页面,输入字段由我无法登录的值填充请建议我解决方案.

我正在尝试下面的代码

        WebClient webClient = new WebClient(BrowserVersion.FIREFOX_3_6);
        webClient.getOptions().setJavaScriptEnabled(true);
        webClient.getOptions().setCssEnabled(true);
        webClient.getOptions().setRedirectEnabled(true);
        webClient.setAjaxController(new NicelyResynchronizingAjaxController());
        webClient.getCookieManager().setCookiesEnabled(true);

        String url="http://xxxxxxxxx.xxx/";
        String name="XXXX";//here real value i am putting for name, accountNo and pass instead of XXXX
        String accountNo="XXXX";
        String pass="XXXX";

        HtmlPage page = webClient.getPage(url);
        System.out.println("1st page : "+page.asText());

        HtmlForm form=(HtmlForm)page.getElementById("aspnetForm");
        HtmlInput uName=(HtmlInput)form.getByXPath("//*[@id=\"ctl00_LoginControl_textUserName_text\"]").get(0);
        uName.setValueAttribute(name);
        HtmlInput acNo=(HtmlInput)form.getByXPath("//*[@id=\"ctl00_LoginControl_textCompanyAccount_text\"]").get(0);
        acNo.setValueAttribute(accountNo);          
        HtmlPasswordInput password=(HtmlPasswordInput)form.getByXPath("//*[@id=\"ctl00_LoginControl_textPassword\"]").get(0);
        password.setValueAttribute(pass);
        HtmlSubmitInput button = (HtmlSubmitInput) form.getByXPath("//*[@id=\"ctl00_LoginControl_buttonLogin\"]").get(0);

        page = (HtmlPage) button.click();
        System.out.println("2nd Page : "+page.asText());

        webClient.closeAllWindows();
Run Code Online (Sandbox Code Playgroud)

单击登录按钮后,同一页面将返回填充的输入字段.所以请帮帮我.谢谢

java htmlunit

6
推荐指数
1
解决办法
4495
查看次数

htmlunit:返回一个完全加载的页面

我正在使用HtmlUnit库for Java以编程方式操作网站.我找不到解决问题的方法:如何确定所有AJAX调用都已完成并返回一个完全加载的网页?这是我尝试过的:

首先,我创建WebClient实例并调用我的方法processWebPage(String url, WebClient webClient)

WebClient webClient = null;
    try {
        webClient = new WebClient(BrowserVersion.FIREFOX_3_6);
        webClient.setThrowExceptionOnScriptError(false);
        webClient.setThrowExceptionOnFailingStatusCode(false);
        webClient.setJavaScriptEnabled(true);
        webClient.setAjaxController(new NicelyResynchronizingAjaxController());
    } catch (Exception e) {
        System.out.println("Error");
    }
    HtmlPage currentPage = processWebPage("http://www.example.com", webClient);
Run Code Online (Sandbox Code Playgroud)

这是我的方法,它应该返回一个完全加载的网页:

private static HtmlPage processWebPage(String url, WebClient webClient) {
    HtmlPage page = null;
    try {
        page = webClient.getPage(url);
    } catch (Exception e) {
        System.out.println("Get page error");
    }
    int z = webClient.waitForBackgroundJavaScript(1000);
    int counter = 1000;
    while (z > 0) {
        counter += 1000;
        z …
Run Code Online (Sandbox Code Playgroud)

java htmlunit

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

Htmlunit 通过 ID 而不是名称获取表单输入

我有一个包含多行和类似输入的表单。它们具有不同的 ID,但名称相同。

<input id="E2EMPL1" class="uppercase required" type="text" value="" maxlength="9" size="9" name="E2EMPL">

<input id="E2EMPL2" class="uppercase required" type="text" value="" maxlength="9" size="9" name="E2EMPL">
Run Code Online (Sandbox Code Playgroud)

我可以填第一行,没问题,但是要填第二行,我就想不通了。

这是填写第一行:

            HtmlPage mainPage = webClient.getPage(siteName);
            form = mainPage.getFormByName("timeForm");

            for (TimeEntry te: aList){
               form.getInputByName("chkaction").setValueAttribute("checked");
               form.getInputByName("E2EMPL").setValueAttribute(te.getResource());
               form.getInputByName("ww_fE2WKDT").setValueAttribute(te.getEntryDate());
            }
Run Code Online (Sandbox Code Playgroud)

但是当名称保持不变时,我不确定如何填写第 2 行,但 ID 更改为 EMPL1、EMPL2 等。我想我应该使用 xpath,但我不确定如何填写?

form.getByXPath("//input[@id='E2EMPL2']"); ???

编辑:作为旁注。我曾尝试使用 HTTPClient 来发布数据。不幸的是,它不适用于这种形式,我不知道为什么。我在这里问了一个问题,但从来没有得到任何答案,也没有足够的代表来悬赏。但是,我只是尝试了 HTMLUnit,如果我填写表单并点击提交按钮,它会正常工作。这就是我不使用 HTTPClient 的原因。

如果有人想看这个问题,我把它删除了,但如果有人真的想看,我会取消删除它。

HTML表单有5行数据,填充一行有点慢,点击提交5次vs填充5行然后点击提交。我希望它会快一点,但如果不可能做到这一点,我会放弃这个。我希望有些人可以有洞察力。

java htmlunit

6
推荐指数
1
解决办法
5460
查看次数

调用站点 #4 bootstrap 方法的异常。代码在 Android Studio 中不起作用,但在 Eclipse 中有效

我正在编写代码以使用 HtmlUnit 登录网站。它一直在 eclipse 中工作,但现在我决定将它移到 Android studio 中在应用程序中使用它。我有2个问题。

  1. 为什么 HtmlUnit 需要 API 26,对于现在的技术来说已经非常高了(只有 19% 的用户),但它只是一个网络模拟器?

  2. 为什么在创建 webClient 时会出现此错误?我的例外是:

java.lang.BootstrapMethodError: Exception from call site #4 bootstrap method
    at com.gargoylesoftware.htmlunit.WebClient.addDefaultHeaders(WebClient.java:1496)
    at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseFromWebConnection(WebClient.java:1392)
    at com.gargoylesoftware.htmlunit.WebClient.loadWebResponse(WebClient.java:1321)
    at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:394)
    at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:315)
    at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:466)
    at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:448)
    at notas.com.mistarapp.Student.login(Student.java:65)
Run Code Online (Sandbox Code Playgroud)

这是我正在经历的代码。所有内容都已导入,并且不会突出显示为错误。这是我的代码:

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

    HtmlPage firstPage = webClient.getPage(link);

    // waitForBackgroundJavaScript has to be called after every action
    webClient.waitForBackgroundJavaScript(100);

    System.out.println("Access to the login page is made.");
    System.out.println("-------------------------------------------------------------------------------");

    // Get the form that we are …
Run Code Online (Sandbox Code Playgroud)

java android htmlunit

6
推荐指数
1
解决办法
3591
查看次数

Android:使用HTML单元和Eclipse时出现CSS错误

我正在使用Html Unit转到网页,填写一些表格,然后单击按钮进入下一个网页.那个新的网页(在我的代码中称为newPage)是我从中提取html源代码的.

这种方法在Netbeans中完美运行(虽然它确实提供了过多的警告)

import org.jsoup.Jsoup;

/* Regular (textview, button, etc) imports */

import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.Page;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlAnchor;
import com.gargoylesoftware.htmlunit.html.HtmlElement;
import com.gargoylesoftware.htmlunit.html.HtmlForm;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
import com.gargoylesoftware.htmlunit.html.HtmlTextInput;


        String username = "USERNAME", school = "SCHOOL", userpassword = "PASSWORD";
        HtmlElement loginName = null;
        HtmlElement password = null;
        //HtmlPage newPage;
        HtmlAnchor anchorByHref = null;
        try {
            WebClient webClient = new WebClient();
            final HtmlPage page = webClient
                    .getPage("https://cupertino.schoolloop.com/portal/login?d=x&return_url=1325402408153");
            loginName = page.getElementByName("login_name");
            password = page.getElementByName("password");
            loginName.setTextContent(username);
            loginName.setAttribute("value", username);
            password.setAttribute("value", userpassword);
            password.setTextContent(userpassword);
            anchorByHref …
Run Code Online (Sandbox Code Playgroud)

java eclipse android htmlunit

5
推荐指数
1
解决办法
928
查看次数

HtmlUnit比GUI浏览器慢?

为什么HtmlUnit比GUI浏览器慢得多?例如,HtmlUnit 在14秒内加载此页面http://oltexpress.airkiosk.com/cgi-bin/airkiosk/I7/181002i?O2=2(当CSS支持关闭时),而FF在5秒内加载(清除缓存后) ,CSS支持).我知道,现代浏览器在处理糟糕的JS代码时没有那么严格,而HtmlUnit是,但是这里的时间差异仍然是无法容忍的.

有关如何加快使用HtmlUnit的任何想法?有没有人玩过HtmlUnit缓存?

caching htmlunit

5
推荐指数
1
解决办法
4738
查看次数

让Jsoup支持JavaScript动态生成的html

现在我正在开发一个webcrawler.这个应该解析一些特定的站点,并给我一个输出到xml文件.到目前为止,这没问题.Crawler可以工作,您可以通过cfg文件快速自定义它.我使用Jsoup来解析HTML内容.

我刚刚添加了一些网站,并注意到我通过JavaScript创建的HTML内容存在巨大问题.难道没有办法让Jsoup支持Javascript吗?或者至少获取我在浏览器中可以看到的完整HTML内容.

我已经尝试过HtmlUnit,但是这个并不好.它没有给我我在浏览器中获得的内容.

诚恳,

Ogofo

html javascript java htmlunit jsoup

5
推荐指数
1
解决办法
6181
查看次数

HtmlUnit会话管理

我正在尝试使用HtmlUnit登录Facebook页面并查看其HTML内容.我正在尝试通过HtmlUnit填写登录凭据,但是当单击提交按钮时我看不到会话正在进行.

无法在htmlunit会话管理类中找到很多内容.我还附加了我正在使用的代码来尝试此问题.任何帮助赞赏!

WebClient webClient = new WebClient();
HtmlPage page1 = webClient.getPage("https://www.facebook.com");
List<HtmlForm> listF = page1.getForms();
HtmlForm form = null;
for(int i=0; i<listF.size(); i++)
{
    if(listF.get(i).getId().equals("login_form"))
    {
        form = listF.get(i);
        }
}
HtmlTextInput uName = form.getInputByName("email");
HtmlPasswordInput passWord = form.getInputByName("pass");
HtmlSubmitInput button = form.getInputByValue("Log In");
uName.setValueAttribute(FACEBOOK_UNAME);
passWord.setValueAttribute(FACEBOOK_PASS);
HtmlPage page2 = button.click();
Run Code Online (Sandbox Code Playgroud)

sessionid htmlunit

5
推荐指数
1
解决办法
5006
查看次数

如何使用HtmlUnit在特定范围之间获取文本

我是HtmlUnit的新手,我甚至不确定它是否适合我的项目.我正在尝试解析一个网站并从中提取我需要的值.我需要从这里获得值"07:05",

<span class="tim tim-dep">07:05</span>
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用getTextContent()来提取值,但我不知道如何选择特定的跨度.我使用getElementById来查找

<div>
Run Code Online (Sandbox Code Playgroud)

这个表达式所属的标签,但当我得到该div的文本内容时,我得到了一整行含有大量不必要数据的文本.有人可以告诉我如何选择这个表达式,可能使用类名吗?

html html-parsing htmlunit

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

使用Java中的扫描程序问题

我正在编写一个程序,需要从输入文本文件中读取数据,并在完成日期时保存变量.我正在使用Htmlunit,并遇到错误:

com.gargoylesoftware.htmlunit.ScriptException: Exception invoking open
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:684)
    at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:602)
    at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:507)
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:616)
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:591)
    at com.gargoylesoftware.htmlunit.html.HtmlPage.executeJavaScriptFunctionIfPossible(HtmlPage.java:985)
    at com.gargoylesoftware.htmlunit.javascript.host.EventListenersContainer.executeEventHandler(EventListenersContainer.java:210)
    at com.gargoylesoftware.htmlunit.javascript.host.EventListenersContainer.executeBubblingListeners(EventListenersContainer.java:230)
    at com.gargoylesoftware.htmlunit.javascript.host.Node.fireEvent(Node.java:804)
    at com.gargoylesoftware.htmlunit.javascript.host.Node.fireEvent(Node.java:738)
    at com.gargoylesoftware.htmlunit.html.HtmlElement$1.run(HtmlElement.java:869)
    at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:602)
    at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:507)
    at com.gargoylesoftware.htmlunit.html.HtmlElement.fireEvent(HtmlElement.java:874)
    at com.gargoylesoftware.htmlunit.html.HtmlElement.doClickFireClickEvent(HtmlElement.java:1311)
    at com.gargoylesoftware.htmlunit.html.HtmlElement.click(HtmlElement.java:1253)
    at com.gargoylesoftware.htmlunit.html.HtmlElement.click(HtmlElement.java:1205)
    at com.gargoylesoftware.htmlunit.html.HtmlElement.click(HtmlElement.java:1160)
    at Docketscraper.scrapeWebsite(Docketscraper.java:58)
    at Docketscraper.starter(Docketscraper.java:40)
Run Code Online (Sandbox Code Playgroud)

我的代码是:

  private static String startingMonth;
  private static String startingDay;
  private static String startingYear;
  private static String endingMonth;
  private static String endingDay;
  private static String endingYear;

  public static void starter() throws IOException{
    Scanner sc = new …
Run Code Online (Sandbox Code Playgroud)

java htmlunit

5
推荐指数
1
解决办法
179
查看次数

标签 统计

htmlunit ×10

java ×7

android ×2

html ×2

caching ×1

eclipse ×1

html-parsing ×1

javascript ×1

jsoup ×1

sessionid ×1