我正在尝试使用HtmlUnit编写一些网站的自动化测试.我们的网页加载了两个JavaScripts,其中一个JavaScripts然后动态地将几个其他JavaScripts加载到DOM中.然后,这些JavaScripts执行一些UI初始化.我的问题是HtmlUnit使用新的JavaScripts更新DOM,但似乎没有运行那些JavaScripts,因为没有出现预期的DOM元素.
以下是我尝试的一些事情:
toXml().page.toXml()方法显示添加的JavaScripts,但不显示预期的UI元素.
executeJavaScript.当我这样做时,它可以找到我直接调用的方法,但该方法无法在其他JavaScripts中找到符号.
还有其他人遇到过这个问题吗?
我想使用selenium webdriver(java)测试一个站点,但该站点包含ajax,HTMLUnit没有看到ajax内容.
有解决方法吗?
例:
WebDriver driver = new HtmlUnitDriver(BrowserVersion.FIREFOX_3_6);
//login into your account
this.login(driver);
//click on edit Profile Link into an ajax-loaded tab
driver.findElement(By.id("editProfile")).click();
//Result: org.openqa.selenium.NoSuchElementException
Run Code Online (Sandbox Code Playgroud) 我正在寻找一种使用HTMLUnit接受cookie(所有cookie)的方法
我正在尝试使用HTMLUnit登录我的wordpress网站,但我拒绝提交表单(因此无法登录),因为我的错误是:
2012年7月14日下午10:42:24 org.apache.http.client.protocol.ResponseProcessCookies processCookies警告:Cookie被拒绝:
码:
package backend;
import java.io.IOException;
import java.net.MalformedURLException;
import java.util.Set;
import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.CookieManager;
import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.gargoylesoftware.htmlunit.util.Cookie;
public class temp {
WebClient myClient = new WebClient(BrowserVersion.FIREFOX_3);
CookieManager cm = new CookieManager();
HtmlPage page;
public void Someting() throws FailingHttpStatusCodeException, MalformedURLException, IOException{
//Disabling Javascript for now.
myClient.setJavaScriptEnabled(false);
myClient.setCssEnabled(false);
myClient.setCookieManager(cm);
page = myClient.getPage("http://nick.wordpress.com/wp-admin");
Set<Cookie> cookies = myClient.getCookieManager().getCookies();
System.out.println("Page status code: " + page.getWebResponse().getStatusCode() + "\nPage status message: " + page.getWebResponse().getStatusMessage());
if(cookies != null)
{ …Run Code Online (Sandbox Code Playgroud) 我是HTMLunit的新手,并尝试为HTMLunit设置HTTPS代理.我试图在HOST IP之前使用https://但是我得到了Exception.
有人可以帮我解决这个问题吗?
更新:我的代码是:
WebClient webClient = new WebClient(BrowserVersion.FIREFOX_3_6,"https://199.127.100.13", 11888);
Run Code Online (Sandbox Code Playgroud)
更新2:我问开发团队,The说它是框架中的一个bug.他们会解决它.
我正在使用HtmlUnit API将爬虫支持添加到我的GWT应用程序,如下所示:
PrintWriter out = null;
try {
resp.setCharacterEncoding(CHAR_ENCODING);
resp.setContentType("text/html");
url = buildUrl(req);
out = resp.getWriter();
WebClient webClient = webClientProvider.get();
// set options
WebClientOptions options = webClient.getOptions();
options.setCssEnabled(false);
options.setThrowExceptionOnScriptError(false);
options.setThrowExceptionOnFailingStatusCode(false);
options.setRedirectEnabled(true);
options.setJavaScriptEnabled(true);
// set timeouts
webClient.setJavaScriptTimeout(0);
webClient.waitForBackgroundJavaScript(20000);
// ajax controller
webClient.setAjaxController(new NicelyResynchronizingAjaxController());
// render page
HtmlPage page = webClient.getPage(url);
webClient.getJavaScriptEngine().pumpEventLoop(timeoutMillis);
out.println(page.asXml());
webClient.closeAllWindows();
}
...
Run Code Online (Sandbox Code Playgroud)
然而; 只生成我的GWT应用程序的裸HTML主机页面并将其发送到客户端.
更新:以下是Chrome DevTools的输出:
Request URL:http://127.0.0.1:8888/MyApp.html?gwt.codesvr=127.0.0.1:9997&_escaped_fragment_=myobject%3Bid%3D507ac730e4b0e3b7a73b1b81
Request Method:GET
Status Code:200 OK
Request Headersview source
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-GB,en-US;q=0.8,en;q=0.6
Cache-Control:max-age=0
Connection:keep-alive
Cookie:__utma=96992031.428505342.1351707614.1351707614.1356355174.2; __utmb=96992031.1.10.1356355174; __utmc=96992031; __utmz=96992031.1351707614.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)
Host:127.0.0.1:8888 …Run Code Online (Sandbox Code Playgroud) 导致此错误的原因是什么,我该如何解决?
WebClient webClient = new WebClient();
HtmlPage page = webClient.getPage("http://stackoverflow.com");
Run Code Online (Sandbox Code Playgroud)
错误信息
2013年5月25日上午10:34:12 com.gargoylesoftware.htmlunit.IncorrectnessListenerImpl notify警告:遇到过时的内容类型:'text/javascript'.2013年5月25日上午10:34:13 com.gargoylesoftware.htmlunit.javascript.StrictErrorReporter runtimeError SEVERE:runtimeError:message = [完成此操作所需的数据尚不可用.] sourceName = [http://ajax.googleapis .com/ajax/libs/jquery/1.7.1/jquery.min.js] line = [2] lineSource = [null] lineOffset = [0] 2013年5月25日10:34:15 com.gargoylesoftware.htmlunit. IncorrectnessListenerImpl notify警告:遇到过时的内容类型:'text/javascript'.2013年5月25日上午10:34:16 com.gargoylesoftware.htmlunit.DefaultCssErrorHandler错误警告:CSS错误:'cdn.sstatic.net/stackoverflow/all.css?v=1748204ca390'[1:3230]样式规则出错.(无效的令牌"!".期待以下之一:,,,"继承",,,,,,,,,,,,,,,,,,,,,,,,,,,,,}},"; ","/"," - ".".2013年5月25日上午10:34:16 com.gargoylesoftware.htmlunit.DefaultCssErrorHandler警告警告:CSS警告:'cdn.sstatic.net/stackoverflow/all.css?v=1748204ca390 '[1:3230]忽略此规则中的以下声明.2013年5月25日上午10:34:16 com.gargoylesoftware.htmlunit.DefaultCssErrorHandler错误警告:CSS错误:'cdn.sstatic.net/stackoverflow/all.css?v=1748204ca390'[1:6341]样式规则出错.(无效的令牌"!".期待以下之一:,,,"继承",,,,,,,,,,,,,,,,,,,,,,,,,,,,,}},"; ","/"," - ".".2013年5月25日上午10:34:16 com.gargoylesoftware.htmlunit.DefaultCssErrorHandler警告警告:CSS警告:'cdn.sstatic.net/stackoverflow/all.css?v=1748204ca390 '[1:6341]忽略此规则中的以下声明.2013年5月25日上午10:34:16 com.gargoylesoftware.htmlunit.DefaultCssErrorHandler错误警告:CSS错误:'cdn.sstatic.net/stackoverflow/all.css?v=1748204ca390'[1:14777]样式规则出错.(无效的令牌"!".期待以下之一:,,,"继承",,,,,,,,,,,,,,,,,,,,,,,,,,,,,}},"; ","/"," - ".".2013年5月25日上午10:34:16 com.gargoylesoftware.htmlunit.DefaultCssErrorHandler警告警告:CSS警告:'cdn.sstatic.net/stackoverflow/all.css?v=1748204ca390 '[1:14777]忽略此规则中的以下声明.2013年5月25日上午10:34:17 com.gargoylesoftware.htmlunit.DefaultCssErrorHandler错误警告:CSS错误:'cdn.sstatic.net/stackoverflow/all.css?v=1748204ca390'[1:31657]样式规则出错.(无效的令牌"!".期待以下之一:,,,"继承",,,,,,,,,,,,,,,,,,,,,,,,,,,,,}},"; ","/"," - "."2013年5月25日上午10:34:17 com.gargoylesoftware.htmlunit.DefaultCssErrorHandler警告警告:CSS警告:'cdn.sstatic.net/stackoverflow/all.css?v=1748204ca390 '[1:31657]忽略此规则中的以下声明.2013年5月25日上午10:34:17 com.gargoylesoftware.htmlunit.DefaultCssErrorHandler错误警告:CSS错误:'cdn.sstatic.net/stackoverflow/all.css?v=1748204ca390'[1:73253]样式规则出错.(无效的令牌":".期待以下之一:,,,"继承",,,,,,,,,,,,,,,,,,,,,,,,,,,,,}},"; ","/"," - "."2013年5月25日上午10:34:17 com.gargoylesoftware.htmlunit.DefaultCssErrorHandler警告警告:CSS警告:'cdn.sstatic.net/stackoverflow/all.css?v=1748204ca390 '[1:73253]忽略此规则中的以下声明.2013年5月25日上午10:34:17 com.gargoylesoftware.htmlunit.DefaultCssErrorHandler错误警告:CSS错误:'cdn.sstatic.net/stackoverflow/all.css?v=1748204ca390'[1:112886]表达式错误.(无效的标记"#ffffff".期待以下之一:,,,,,," - ","=",")".)2013年5月25日上午10:34:17 com.gargoylesoftware.htmlunit.DefaultCssErrorHandler错误警告:CSS错误:'cdn.sstatic.net/stackoverflow/all.css?v=1748204ca390'[1:112928]样式规则出错.(无效的令牌"背景".期待以下之一:,"}",";".)2013年5月25日上午10:34:17 com.gargoylesoftware.htmlunit.DefaultCssErrorHandler警告警告:CSS警告:'cdn.sstatic. net/stackoverflow/all.css?v = 1748204ca390'[1:112928]忽略此规则中的以下声明.2013年5月25日上午10:34:19 com.gargoylesoftware.htmlunit.javascript.host.ActiveXObject jsConstructor警告:自动化服务器无法为"ShockwaveFlash.ShockwaveFlash.7"创建对象.2013年5月25日上午10:34:19 com.gargoylesoftware.htmlunit.javascript.StrictErrorReporter runtimeError SEVERE:runtimeError:message = …
我有一个HTML页面,其中使用javascript生成UI。在htmlunit中,我试图等待javascript执行,然后将其打印为Xml,但看不到DOM元素!我该怎么办?
我希望从一组网页中收集信息,这些网页的格式非常相似.我需要在打开后通过Javascript加载到页面上的一些信息.似乎HTMLUnit是一个非常常见的工具,所以我正在使用它.不幸的是,这很慢,这是我在许多论坛上看到的抱怨.webClient.getPage()命令是永远的.当我关闭Javascript时,它运行得很快,但我需要执行一些Javascript命令.我想知道,有没有办法有选择地执行一些Javascript命令而不是所有命令?
或者,是否有一个比HTMLUnit快得多的程序来处理Javascript?
我正在使用htmlunit(版本2.15) ; 我注意到WebClient类存在内存泄漏问题:所有webClient实例都没有被垃圾收集器清理.
这个问题似乎是由线程死锁造成的:
JavaScriptExecutor.run(JavaScriptExecutor.java:182)
Run Code Online (Sandbox Code Playgroud)
我试图为每个实例调用webclient.closeAllWindows但不起作用.
我确信所有对webClient对象的引用都已取消分配.
如何从webClient对象中正确清理内存以避免OOM?由于线程锁定,垃圾收集器无法删除webClient对象.
我用谷歌搜索了几个小时,但我找不到任何有效的解决方案.
谢谢.
所以我有一个Ember应用程序,我需要为抓取目的拍摄快照.Ember应用程序使用Google+ API进行歌唱.它还在索引页面中嵌入了Youtube视频.我用HtmlUnit v2.15.
我正在使用以下代码初始化HtmlUnit:
// use the headless browser to obtain an HTML snapshot
final WebClient webClient = new WebClient(BrowserVersion.CHROME);
webClient.getOptions().setJavaScriptEnabled(true);
webClient.getOptions().setActiveXNative(true);
webClient.getOptions().setAppletEnabled(true);
webClient.getOptions().setCssEnabled(true);
webClient.getOptions().setUseInsecureSSL(true);
webClient.getOptions().setThrowExceptionOnScriptError(false);
HtmlPage page = webClient.getPage(originalUrl);
// important! Give the headless browser enough time to execute JavaScript
// The exact time to wait may depend on your application.
webClient.waitForBackgroundJavaScript(5000);
// return the snapshot
logger.info("Writing snapshot for URL: " + originalUrl);
response.getWriter().write(page.asXml());
webClient.closeAllWindows();
Run Code Online (Sandbox Code Playgroud)
现在,我有一个问题发生在所有3个主要浏览器版本(CHROME,INTERNET_EXPLORER_11,FIREFOX_24):
runtimeError: message=[An invalid or illegal selector was specified (selector: …Run Code Online (Sandbox Code Playgroud)htmlunit ×10
java ×6
javascript ×2
ajax ×1
cookies ×1
deadlock ×1
dom ×1
gwt ×1
html ×1
httpclient ×1
proxy ×1
web-crawler ×1
webdriver ×1
wordpress ×1