我正在尝试使用HtmlUnit登录我当地的wordpress网站,但它似乎有一个cookie问题.
这就是代码的开头:
WebClient webClient = new WebClient();
HtmlPage loginPage = webClient.getPage("http://localhost/flowersWp/wp-admin");
HtmlForm form = loginPage.getFormByName("loginform");
Run Code Online (Sandbox Code Playgroud)
这就是我在日志中得到的.有人有想法吗?谢谢.
2010年11月27日12:43:35 org.apache.http.client.protocol.ResponseProcessCookies processCookies警告:Cookie被拒绝:"[version:0] [name:wordpress_2418eeb845ebfb96f6f1a71ab8c5625a] [value:+] [domain:localhost] [path :/ flowersWp/wp-admin] [expiry:Fri Nov 27 12:43:35 IST 2009]".非法路径属性"/ flowersWp/wp-admin".原产地:"/ flowersWp/wp-login.php"
我用htmlunit.如果没有属性'value',我如何设置文本输入的值?
<input type="text" onkeypress="test();" id="id" name="name" class="ttt">
Run Code Online (Sandbox Code Playgroud)
我尝试了这个,但没有
((HtmlTextInput) portfolios.getHtmlElementById("id")).setText("text");
((HtmlInput) portfolios.getHtmlElementById("id")).setTextContent("text");
((HtmlInput) portfolios.getHtmlElementById("id")).setAttribute("value", "text");
Run Code Online (Sandbox Code Playgroud)
请帮忙!
Hy ...我想使用HtmlUnit登录到一些第三方网站.但是HtmlUnit应该能够告诉我对输入站点的登录尝试是否成功.有没有办法使用HtmlUnit执行此任务.请帮忙 ..!!!
谢谢Usman Raza
我有一个看起来像这样的网站结构:
<div class='main_container'>
<div class='item_container'>
<div class='body'>
<span class='item_name'>Item 1</span>
<span class='item_desc'>Desc 1</span>
</div>
</div>
<div class='item_container'>
<div class='body'>
<span class='item_name'>Item 2</span>
<span class='item_desc'>Desc 2</span>
</div>
</div>
...
</div><!--End of main_container-->
//Note: Some divs might not have <span @class='item_name'>Item N</span> or other elements inside the item_container
Run Code Online (Sandbox Code Playgroud)
在HtmlUnit 1.14中如果我想获得所有项目名称:
List<HtmlDivision> divs = (List<HtmlDivision>)page.getByXPath("//div[@class='item_container']");
for(HtmlDivision div:divs){
String name = ((HtmlElement)div.getFirstByXPath("//span[@class='item_name']")).asText();
System.out.println(name);
}
Run Code Online (Sandbox Code Playgroud)
输出:
Item 1
Item 2
...
Run Code Online (Sandbox Code Playgroud)
但是在HtmlUnit 2.8中,当我做同样的事情时,我得到了.
Item 1
Item 1
...
Run Code Online (Sandbox Code Playgroud)
在HtmlUnit 2.8中是否有解决方法?
我有一个URL.我想在执行Java Scripts后获取URL的Page-Source.
最初我怀疑这是由于系统资源和高CPU使用率导致URL卡住了.
然后我尝试在HTML UNIT 2.9和2.11上运行它.它在解析时都遇到了问题.请参阅上面的问题,以获取卡住的HTML UNIT代码.
现在我怀疑这可能是由于JS Execution进入无限循环.
我想检查哪些JS文件导致问题并将其从执行中删除.
如果他们是谷歌分析,推特等网站的JS,我可能根本不需要它们.
所以我想找到一种方法告诉HTML单元忽略某些JS文件并执行其余的.
有谁知道怎么做?
我试图在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)
单击登录按钮后,同一页面将返回填充的输入字段.所以请帮帮我.谢谢
我是HtmlUnit的新手,我在登录时遇到了一些麻烦.下面的代码工作得非常好,FireFoxDriver但却失败了HtmlUnitDriver.问题是javascript点击"登录"链接时没有执行;
用于html查看的网站网址:https://fleetworks.trimbletl.com/fleet/start.do
HtmlUnitDriver driver = new HtmlUnitDriver(BrowserVersion.CHROME_16);
driver.setJavascriptEnabled(true);
WebDriverWait wait = new WebDriverWait(driver, 10);
driver.get(fleetWorkURL);
WebElement usernameElement = driver.findElement(By.name("j_username"));
usernameElement.sendKeys(username);
WebElement passwordElement = driver.findElement(By.name("j_password"));
passwordElement.sendKeys(password);
WebElement loginButtonElement = driver.findElement(By.linkText("Log in"));
loginButtonElement.click();
wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt("headerFrame"));
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪:
13, 2013 2:47:54 PM com.gargoylesoftware.htmlunit.IncorrectnessListenerImpl notify
WARNING: Obsolete content type encountered: 'text/javascript'.
13, 2013 2:47:54 PM com.gargoylesoftware.htmlunit.IncorrectnessListenerImpl notify
WARNING: Obsolete content type encountered: 'text/javascript'.
13, 2013 2:47:55 PM com.gargoylesoftware.htmlunit.IncorrectnessListenerImpl notify
WARNING: Obsolete content type encountered: 'text/javascript'.
2013 2:47:56 …Run Code Online (Sandbox Code Playgroud) 我使用SeleniumHQ记录我的动作,然后将它们导出到Java Unity WebDrive.然后我编辑了导出的代码并添加了许多额外的东西,比如循环数组,时间戳等.
我的代码如下:
我尝试过使用FirefoxDriver和HtmlUnitDriver,但是每一个都给了我这个奇怪的问题.我的代码开始做它的工作并随机停留在随机点并永远挂在那里.
例如,它可以登录 - >转到配置文件 - >删除先前然后停止,或者它可以挂在登录中.我一遍又一遍地循环这些步骤,更多的循环更可能是卡住了.
第一循环成功率是90%,第二循环是40%左右等.Driver我使用的也影响了这一点.它最有可能挂起,HtmlUnitDriver我真的想要使用,HtmlUnitDrive因为我想在Ubuntu Server上运行我的代码无头.
还有其他人有类似的问题吗?
编辑:经过几个小时的测试,我注意到它只有HtmlUnitDriver挂起而不是Firefox.使用Firefox时,我可以看到它正在做什么,它正在做所有应有的事情.出现问题HtmlUnitDriver.
这是代码本身:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.concurrent.TimeUnit;
import org.junit.*;
import static org.junit.Assert.*;
import org.openqa.selenium.*;
import org.openqa.selenium.htmlunit.HtmlUnitDriver;
public class WebUpdater {
private WebDriver driver;
private String baseUrl;
private boolean acceptNextAlert = true;
private StringBuffer verificationErrors = new StringBuffer();
@Before
public void setUp() throws …Run Code Online (Sandbox Code Playgroud) 我正在使用HtmlUnit登录到一个站点,然后从表中下载数据
当我运行我的代码是导致java.lang.OutOfMemoryError并且无法进一步运行.
以下是我的代码:
WebClient webClient = new WebClient(BrowserVersion.INTERNET_EXPLORER_6);
webClient.getOptions().setJavaScriptEnabled(true);
webClient.getOptions().setCssEnabled(false);
webClient.getOptions().setRedirectEnabled(true);
webClient.getCookieManager().setCookiesEnabled(true);
webClient.getOptions().setPrintContentOnFailingStatusCode(false);
webClient.setAjaxController(new NicelyResynchronizingAjaxController());
webClient.getOptions().setTimeout(50000);
webClient.getOptions().setUseInsecureSSL(true);
webClient.getOptions().setPopupBlockerEnabled(true);
HtmlPage htmlPage=webClient.getPage(url);
Thread.sleep(200);
//~~~~~~~Log-In
HtmlTextInput uname=(HtmlTextInput)htmlPage.getFirstByXPath("//*[@id=\"username\"]");
uname.setValueAttribute("xxx");
HtmlPasswordInput upass=(HtmlPasswordInput)htmlPage.getFirstByXPath("//*[@id=\"password\"]");
upass.setValueAttribute("xxx");
HtmlSubmitInput submit=(HtmlSubmitInput)htmlPage.getFirstByXPath("//*[@id=\"login-button\"]/input");
htmlPage=(HtmlPage) submit.click();
Thread.sleep(200);
webClient.waitForBackgroundJavaScript(10000);
for (int i = 0; i < 250; i++) {
if (!htmlPage.asText().contains("Loading...")) {
break;
}
synchronized (htmlPage) {
htmlPage.wait(500);
}
}
System.out.println(htmlPage.asText());
Run Code Online (Sandbox Code Playgroud)
以下是stackTrace
java.lang.OutOfMemoryError: Java heap space
at net.sourceforge.htmlunit.corejs.javascript.Node.newString(Node.java:155)
at net.sourceforge.htmlunit.corejs.javascript.Node.newString(Node.java:151)
at net.sourceforge.htmlunit.corejs.javascript.IRFactory.createPropertyGet(IRFactory.java:1990)
at net.sourceforge.htmlunit.corejs.javascript.IRFactory.transformPropertyGet(IRFactory.java:968)
at net.sourceforge.htmlunit.corejs.javascript.IRFactory.transform(IRFactory.java:106)
at net.sourceforge.htmlunit.corejs.javascript.IRFactory.transformPropertyGet(IRFactory.java:964)
at net.sourceforge.htmlunit.corejs.javascript.IRFactory.transform(IRFactory.java:106)
at net.sourceforge.htmlunit.corejs.javascript.IRFactory.transformPropertyGet(IRFactory.java:964)
at …Run Code Online (Sandbox Code Playgroud) 我正在编写代码以使用 HtmlUnit 登录网站。它一直在 eclipse 中工作,但现在我决定将它移到 Android studio 中在应用程序中使用它。我有2个问题。
为什么 HtmlUnit 需要 API 26,对于现在的技术来说已经非常高了(只有 19% 的用户),但它只是一个网络模拟器?
为什么在创建 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)