gpt4 book ai didi

javascript - 使用 HtmlUnit 等待 Javascript

转载 作者:行者123 更新时间:2023-12-03 10:11:40 25 4
gpt4 key购买 nike

前几天我正在试验 HtmlUnit。我编写了一个程序,用于执行站点登录并收集一些信息。但是,当单击特定按钮时,htmlUnit 不会等待结果操作。我试图等到 JavascriptJobManager 的所有作业都完成,但它卡在大约 15 个作业上。之后我尝试等到生成的 htmlpage 发生变化,但这也不起作用。接下来我可以尝试什么?感谢您抽出宝贵的时间,我将尽力尽快实现任何建议。

编辑:我完全知道 Facebook 不喜欢网络爬行,但我这样做只是为了学习目的,所以没有造成任何伤害。出现错误消息后,程序会抛出异常。 http://www.pastebin.ca/3007578

当单击 infoButton 时,会出现一个新窗口,从而使旧窗口无法访问。 /image/JGQLV.jpg

final static WebClient webClient = new WebClient(BrowserVersion.FIREFOX_31); 
public static void main(String [] args) throws FailingHttpStatusCodeException, MalformedURLException, IOException, InterruptedException{
//init webclient
webClient.setAjaxController(new NicelyResynchronizingAjaxController());
webClient.getOptions().setRedirectEnabled(true);
webClient.getOptions().setJavaScriptEnabled(true);
webClient.getCookieManager().setCookiesEnabled(true);
webClient.getOptions().setThrowExceptionOnScriptError(true);
webClient.getOptions().setCssEnabled(true);
webClient.getOptions().setUseInsecureSSL(true);
webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
webClient.waitForBackgroundJavaScript(12000);
webClient.setAlertHandler(new AlertHandler() {

@Override
public void handleAlert(Page arg0, String arg1) {
System.out.println("ALERT ON "+arg0.getUrl()+" :"+ arg1);
}
});

// perform the login
final HtmlPage loginPage = webClient.getPage("https://facebook.com");
final HtmlForm form = loginPage.getForms().get(0);
final HtmlTextInput username = form.getInputByName("email");
final HtmlPasswordInput password = form.getInputByName("pass");
final HtmlElement button = (HtmlElement) loginPage.getElementById("u_0_l");
username.setText("Your email");
password.setText("Your password");
final HtmlPage frontPage = (HtmlPage) button.click();

// The actual problem
final HtmlPage testPage = webClient.getPage("https://www.facebook.com/pages/Stackoverflow/1462865420609264");
HtmlElement infoButton = testPage.getFirstByXPath("//*[@class='share_action_link']"); // First share button.

HtmlPage testPage2 = infoButton.click();

JavaScriptJobManager manager = testPage2.getEnclosingWindow().getJobManager();
while (manager.getJobCount() > 0) {
Thread.sleep(1000);
webClient.waitForBackgroundJavaScript(100);
System.out.println(manager.getEarliestJob());
}

while(testPage == testPage2){
System.out.println("failed");
webClient.waitForBackgroundJavaScript(100);
Thread.sleep(5 * 1000);
}
}

最佳答案

latest snapshot (在maven中也是如此),有一个window.performance未定义的错误,已修复。

编辑:检测到另一个错误,已修复并部署了快照。

请重新测试

关于javascript - 使用 HtmlUnit 等待 Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30082718/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com