标签: htmlunit

Html,处理JSON响应

我有一个页面作为HtmlUnit中的UnexpectedPage返回,响应是JSON.我可以使用HTMLUnit来解析这个还是需要一个额外的库?

java json htmlunit

11
推荐指数
1
解决办法
9298
查看次数

如何在Java中使用HtmlUnit?

我正在尝试使用Java中的HtmlUnit登录网站.首先我输入用户名然后输入密码.之后我需要从下拉框中选择一个选项.输入用户和密码似乎有效,但当我尝试从下拉框中选择项目时,我收到错误.谁能帮我解决这个问题?我的代码如下:

import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlElement;
import com.gargoylesoftware.htmlunit.html.HtmlOption;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.gargoylesoftware.htmlunit.html.HtmlSelect;


public class homePage {
  public static void main(String[] args) throws Exception {

    final WebClient webClient = new WebClient();
    final HtmlPage page = webClient.getPage("website name here");
    HtmlElement usrname = page.getElementByName("username");
    usrname.click();
    usrname.type("myusername");
    HtmlElement psswrd = page.getElementByName("password");
    psswrd.click();
    psswrd.type("mypassword");
    HtmlSelect select = (HtmlSelect) page.getElementById("cmbProducts");
    HtmlOption option = select.getOptionByValue("ITDirect");
    select.setSelectedAttribute(option, true);
    HtmlElement signin = page.getElementByName("SignIn");
    signin.click();
    System.out.println(page.getTitleText());
    webClient.closeAllWindows();
  }
}
Run Code Online (Sandbox Code Playgroud)

java htmlunit

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

使用HTMLUnit从URL保存图像

是否可以通过为图像URL提供图像来将图像保存到HTML硬盘?如果是这样的话?

问候!

java htmlunit

10
推荐指数
1
解决办法
8527
查看次数

有没有办法用HtmlUnit触发滚动事件,还是根本不可能?

我目前正在学习HtmlUnit以便抓取网站.一切顺利,直到我遇到动态页面(例如,我正在使用Pinterest网站),当用户向下滚动时,动态添加元素.

我已经尝试了几种应该在真实浏览器中触发滚动的方法(我将在下面显示).在进一步讨论之前,我想提一下我已经设置了以下配置:

    webclient.setJavaScriptEnabled(true);
    webclient.setAjaxController(new NicelyResynchronizingAjaxController());
Run Code Online (Sandbox Code Playgroud)

让我们说我想让所有关注者都在Pinterest上.我导航到那个页面,现在从第一次只有24个,我想向下滚动,触发Ajax调用服务器并检索下一组关注者的事件.

1)简单的javascript或jQuery代码触发窗口滚动.

    ScriptResult sr = followersPage.executeJavaScript("window.scrollBy(0,1000)");
    // One version in jQuery
    // ScriptResult sr = followersPage.executeJavaScript("$(window).scrollTop(0,1000);");
    // also tried with the body, html, with animation
    // ScriptResult sr = followersPage.executeJavaScript("$("html, body").animate({ scrollTop: $(document).height() }, 1000);");
    webclient.waitForBackgroundJavaScript(10000);
    followersPage = (HtmlPage)sr.getNewPage();
Run Code Online (Sandbox Code Playgroud)

=>当我检查到顶部的距离时,它等于0,结果页面与原始页面相同.在Eclipse中进行调试时,当我跨越执行javascript的行时,它会直接转到下一行,没有任何延迟.如果我写任何其他JavaScript,例如:

     ScriptResult sr = followersPage.executeJavaScript("$(div.GridItems).html('new content')");
Run Code Online (Sandbox Code Playgroud)

您可以注意到调试器在该行上挂起了半秒钟,这意味着执行了javascript.

2)将焦点从一个跟随锚点更改为另一个(我选择了锚点,因为当您单击TAB键时它在焦点顺序中使用):

    HtmlDivision gridItems = followersPage.getFirstByXPath("//div[contains(concat(' ',@class,' '),' GridItems ')]");
    List<HtmlDivision> els = (List<HtmlDivision>) gridItems.getByXPath("//div[@class='item ']");
    List<HtmlDivision> items = (List<HtmlDivision>) gridItems.getByXPath("//div[@class='item ']");
    for (HtmlDivision item : items) {
        HtmlAnchor a …
Run Code Online (Sandbox Code Playgroud)

javascript ajax scroll htmlunit pinterest

10
推荐指数
1
解决办法
1521
查看次数

HtmlUnit下载附件

我需要保存来自网站的文件HtmlUnit.我目前正在导航到有几个使用javascript onClick()="DownloadAttachment('attachmentId')"获取文件的锚点的页面.这些文件几乎可以是任何类型的文件(xls,doc,txt,pdf,jpg等).到目前为止,虽然我一直无法找到显示如何使用保存文件的资源或示例htmlUnit.我一直在努力AttachmentHandler为此工作,因为它似乎最有可能工作,但一直没有成功.我想知道是否有其他人设法使用下载文件HtmlUnit并可以提供帮助?

java attachment htmlunit

9
推荐指数
0
解决办法
4128
查看次数

XPath用于定位具有解析HTML表的特定文本的单元格

希望有人可以迅速指出我的XPath困难正确的方向.

目前我已经到了我在HTML源代码中识别我需要的正确表格的那一点,但后来我只需要处理在DOM中某处有文本"Chapter"的行.

我的最后一次尝试是这样做:

// get the correct table
HtmlTable table = page.getFirstByXPath("//table[2]");

// now the failing bit....
def rows = table.getByXPath("*/td[contains(text(),'Chapter')]") 
Run Code Online (Sandbox Code Playgroud)

我认为上面的xpath代表,让我所有具有后续子元素'td'的元素在其dom中的某个地方包含文本'Chapter'

我的源代码中匹配行的示例如下:

<tr valign="top">
  <td nowrap="" align="Right">
   <font face="Verdana">
   <a href="index.cfm?a=1">Chapter 1</a>
   </font>
  </td>
  <td class="ChapterT">
    <font face="Verdana">DEFINITIONS</font>
  </td>
  <td>&nbsp;</td>
</tr>
Run Code Online (Sandbox Code Playgroud)

任何帮助/指针非常感谢.

谢谢,

xml groovy xpath htmlunit

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

使用htmlunit抓取动态网页

我正在使用动态网页中的HtmlUnit抓取数据,动态网页使用无限滚动来动态获取数据,就像facebook的新闻源一样.我使用以下句子来模拟向下滚动事件:

webclient.setJavaScriptEnabled(true);
webclient.setAjaxController(new NicelyResynchronizingAjaxController());
ScriptResult sr=myHtmlPage.executeJavaScript("window.scrollBy(0,600)");
webclient.waitForBackgroundJavaScript(10000);
myHtmlPage=(HtmlPage)sr.getNewPage();
Run Code Online (Sandbox Code Playgroud)

但似乎myHtmlPage与前一个保持相同,即myHtmlPage中没有附加新数据,因此我只能抓取网页上的前几个数据.谢谢你的帮助!

javascript ajax web-crawler htmlunit infinite-scroll

9
推荐指数
1
解决办法
4285
查看次数

期货是否在单个线程上执行?(斯卡拉)

使用Scala中的默认隐式执行上下文,是否会在单个专用线程上计算每个新的未来,还是将计算划分并分发到线程池中的多个线程?

我不知道这是否有帮助,这个问题的背景是我想使用HtmlUnit API执行多个并发操作.为此,我将每个新的WebClient实例包装在Future中.唯一的问题是WebClient类不是线程安全的,所以我担心它可能会被分解并发送到不同的线程.

concurrency multithreading scala future htmlunit

9
推荐指数
1
解决办法
2891
查看次数

Java - 使用HtmlUnit发送发布请求

无法真正找到任何帮助,但我一直在尝试用HtmlUnit发送一个帖子请求.我的代码是:

final WebClient webClient = new WebClient();

// Instead of requesting the page directly we create a WebRequestSettings object
WebRequest requestSettings = new WebRequest(
  new URL("www.URLHERE.com"), HttpMethod.POST);

// Then we set the request parameters
requestSettings.setRequestParameters(new ArrayList());
requestSettings.getRequestParameters().add(new NameValuePair("name", "value"));
// Finally, we can get the page
HtmlPage page = webClient.getPage(requestSettings);
Run Code Online (Sandbox Code Playgroud)

有没有更简单的方法可以执行POST请求?

java htmlunit

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

在单元测试中获取错误"Provider com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl"但在主程序中没有

我在C#中构建一个应用程序,它使用com.gargoylesoftware.htmlunit.WebClient来访问和检索来自网页的信息.

我的应用程序从主项目运行良好,但当我尝试构建单元测试来测试项目类时,我收到以下错误:

FactoryConfigurationError
Message "Provider com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl not found"
Source  "IKVM.OpenJDK.XML.API"  string
StackTrace  "   at javax.xml.parsers.DocumentBuilderFactory.newInstance()
at com.gargoylesoftware.htmlunit.javascript.configuration.JavaScriptConfiguration.loadConfiguration(Reader configurationReader)
at com.gargoylesoftware.htmlunit.javascript.configuration.JavaScriptConfiguration.loadConfiguration()
at com.gargoylesoftware.htmlunit.javascript.configuration.JavaScriptConfiguration..ctor(BrowserVersion )
at com.gargoylesoftware.htmlunit.javascript.configuration.JavaScriptConfiguration.getInstance(BrowserVersion browserVersion)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine..ctor(WebClient webClient)
at com.gargoylesoftware.htmlunit.WebClient.init(BrowserVersion , ProxyConfig )
at com.gargoylesoftware.htmlunit.WebClient..ctor(BrowserVersion browserVersion)
at com.gargoylesoftware.htmlunit.WebClient..ctor()
at GWT.HeadlessBrowser..ctor() in C:\\hg\\EXE\\GWT\\HeadlessBrowser.cs:line 57
at TestGWT.ProgramTest.TestLogInProcessForGWT() in C:\\hg\\TestGWT\\ProgramTest.cs:line 115"
Run Code Online (Sandbox Code Playgroud)

尝试在单元测试类中创建HtmlUnit WebClient也会导致此错误.

我在主项目和包含单元测试的项目中都有项目引用htmlunit-2.7,IKVM.OpenJDK.Core和IKVM.OpenJDK.XML.API.

我是否需要额外的项目参考才能运行单元测试?可能导致此错误的原因是什么?

测试类使用Microsoft.VisualStudio.TestTools.UnitTesting;

c# unit-testing webclient htmlunit

8
推荐指数
2
解决办法
5015
查看次数