gpt4 book ai didi

java - 需要帮助在 java 中使用 Htmlunit 登录我的雅虎邮件帐户

转载 作者:行者123 更新时间:2023-11-29 05:41:52 25 4
gpt4 key购买 nike

我需要帮助尝试使用 java 中的 Htmlunit 登录我的雅虎电子邮件。我收到错误,我对 Htmlunit 真的很陌生。我听说这是用于屏幕抓取的最佳工具,为了让我进行屏幕抓取,我需要登录到我的内部网,但我正在练习使用我的雅虎邮箱。请帮忙!!

import java.net.*;
import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.*;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;


public class HtmlDelete {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
HtmlDelete main = new HtmlDelete();
try {
main.submittingForm();
} catch (Exception ex) {
Logger.getLogger(HtmlDelete.class.getName()).log(Level.SEVERE, null, ex); }
}

public void submittingForm() throws Exception {
final WebClient webClient = new WebClient();
//webClient.setJavaScriptEnabled(false);
// Get the first page
final HtmlPage page1 = webClient.getPage("https://login.yahoo.com/config/login_verify2?.intl=us&.src=ym");

// Get the form that we are dealing with and within that form,
// find the submit button and the field that we want to change.
final HtmlForm form = page1.getFormByName("login_form");

//final HtmlSubmitInput button = form.getInputByName("subbtn");
final HtmlSubmitInput button = page1.getHtmlElementById(".save");
final HtmlTextInput loginName = form.getInputByName("login");
final HtmlPasswordInput loginPs = form.getInputByName("passwd");

// Change the value of the text field
loginName.setValueAttribute("xxxx@yahoo.com");
loginPs.setValueAttribute("exxxxx5");

// Now submit the form by clicking the button and get back the second page.
final HtmlPage page2 = button.click();
final String pageAsXml = page2.asText();
System.out.println(pageAsXml);
//webClient.closeAllWindows();
}
}

输出

    Jun 19, 2013 9:31:47 AM com.att.temp.HtmlDelete main
SEVERE: null
======= EXCEPTION START ========
Exception class=[net.sourceforge.htmlunit.corejs.javascript.WrappedException]
com.gargoylesoftware.htmlunit.ScriptException: Wrapped com.gargoylesoftware.htmlunit.ScriptException: Wrapped com.gargoylesoftware.htmlunit.ScriptException: TypeError: Cannot call method "one" of null (https://s.yimg.com/lq/lib/yui-ssl/3.4.1/build/yui/yui-min.js#8)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:669)
at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:601)
at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:507)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:601)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:576)
at com.gargoylesoftware.htmlunit.html.HtmlPage.executeJavaScriptFunctionIfPossible(HtmlPage.java:1005)
at com.gargoylesoftware.htmlunit.javascript.host.EventListenersContainer.executeEventHandler(EventListenersContainer.java:208)
at com.gargoylesoftware.htmlunit.javascript.host.EventListenersContainer.executeBubblingListeners(EventListenersContainer.java:228)
at com.gargoylesoftware.htmlunit.javascript.host.Node.fireEvent(Node.java:813)
at com.gargoylesoftware.htmlunit.javascript.host.Node.fireEvent(Node.java:737)
at com.gargoylesoftware.htmlunit.html.HtmlElement$1.run(HtmlElement.java:867)
at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:601)
at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:507)
at com.gargoylesoftware.htmlunit.html.HtmlElement.fireEvent(HtmlElement.java:872)
at com.gargoylesoftware.htmlunit.html.HtmlPage.executeEventHandlersIfNeeded(HtmlPage.java:1268)
at com.gargoylesoftware.htmlunit.html.HtmlPage.initialize(HtmlPage.java:237)
at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseInto(WebClient.java:441)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:309)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:374)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:359)
at com.att.temp.HtmlDelete.submittingForm(HtmlDelete.java:34)
at com.att.temp.HtmlDelete.main(HtmlDelete.java:24)

Inside wrapped exception:
======= EXCEPTION START ========
Exception class=[net.sourceforge.htmlunit.corejs.javascript.WrappedException]
com.gargoylesoftware.htmlunit.ScriptException: Wrapped com.gargoylesoftware.htmlunit.ScriptException: TypeError: Cannot call method "one" of null (https://s.yimg.com/lq/lib/yui-ssl/3.4.1/build/yui/yui-min.js#8)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:669)
at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:601)
at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:507)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:601)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:576)
at com.gargoylesoftware.htmlunit.html.HtmlPage.executeJavaScriptFunctionIfPossible(HtmlPage.java:1005)
at com.gargoylesoftware.htmlunit.javascript.host.EventListenersContainer.executeEventHandler(EventListenersContainer.java:208)
at com.gargoylesoftware.htmlunit.javascript.host.EventListenersContainer.executeListeners(EventListenersContainer.java:293)
at com.gargoylesoftware.htmlunit.javascript.host.Window.executeEvent(Window.java:1975)
at com.gargoylesoftware.htmlunit.javascript.host.Node.executeEvent(Node.java:725)
at com.gargoylesoftware.htmlunit.html.HtmlScript.setAndExecuteReadyState(HtmlScript.java:535)
at com.gargoylesoftware.htmlunit.html.HtmlScript$3.execute(HtmlScript.java:261)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.doProcessPostponedActions(JavaScriptEngine.java:714)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.access$500(JavaScriptEngine.java:91)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:664)
at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:601)
at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:507)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:601)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:576)
at com.gargoylesoftware.htmlunit.html.HtmlPage.executeJavaScriptFunctionIfPossible(HtmlPage.java:1005)
at com.gargoylesoftware.htmlunit.javascript.host.EventListenersContainer.executeEventHandler(EventListenersContainer.java:208)
at com.gargoylesoftware.htmlunit.javascript.host.EventListenersContainer.executeBubblingListeners(EventListenersContainer.java:228)
at com.gargoylesoftware.htmlunit.javascript.host.Node.fireEvent(Node.java:813)
at com.gargoylesoftware.htmlunit.javascript.host.Node.fireEvent(Node.java:737)
at com.gargoylesoftware.htmlunit.html.HtmlElement$1.run(HtmlElement.java:867)
at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:601)
at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:507)
at com.gargoylesoftware.htmlunit.html.HtmlElement.fireEvent(HtmlElement.java:872)
at com.gargoylesoftware.htmlunit.html.HtmlPage.executeEventHandlersIfNeeded(HtmlPage.java:1268)
at com.gargoylesoftware.htmlunit.html.HtmlPage.initialize(HtmlPage.java:237)
at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseInto(WebClient.java:441)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:309)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:374)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:359)
at com.att.temp.HtmlDelete.submittingForm(HtmlDelete.java:34)
at com.att.temp.HtmlDelete.main(HtmlDelete.java:24)

======= EXCEPTION START ========
Exception class=[net.sourceforge.htmlunit.corejs.javascript.JavaScriptException]
com.gargoylesoftware.htmlunit.ScriptException: TypeError: Cannot call method "one" of null (https://s.yimg.com/lq/lib/yui-ssl/3.4.1/build/yui/yui-min.js#8)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:669)
at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:601)
at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:507)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.execute(JavaScriptEngine.java:555)
at com.gargoylesoftware.htmlunit.html.HtmlPage.loadExternalJavaScriptFile(HtmlPage.java:1082)
at com.gargoylesoftware.htmlunit.html.HtmlScript.executeScriptIfNeeded(HtmlScript.java:399)
at com.gargoylesoftware.htmlunit.html.HtmlScript$3.execute(HtmlScript.java:260)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.doProcessPostponedActions(JavaScriptEngine.java:714)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.access$500(JavaScriptEngine.java:91)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:664)
at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:601)
at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:507)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:601)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:576)
at com.gargoylesoftware.htmlunit.html.HtmlPage.executeJavaScriptFunctionIfPossible(HtmlPage.java:1005)
at com.gargoylesoftware.htmlunit.javascript.host.EventListenersContainer.executeEventHandler(EventListenersContainer.java:208)
at com.gargoylesoftware.htmlunit.javascript.host.EventListenersContainer.executeListeners(EventListenersContainer.java:293)
at com.gargoylesoftware.htmlunit.javascript.host.Window.executeEvent(Window.java:1975)
at com.gargoylesoftware.htmlunit.javascript.host.Node.executeEvent(Node.java:725)
at com.gargoylesoftware.htmlunit.html.HtmlScript.setAndExecuteReadyState(HtmlScript.java:535)
at com.gargoylesoftware.htmlunit.html.HtmlScript$3.execute(HtmlScript.java:261)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.doProcessPostponedActions(JavaScriptEngine.java:714)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.access$500(JavaScriptEngine.java:91)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:664)
at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:601)
at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:507)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:601)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:576)
at com.gargoylesoftware.htmlunit.html.HtmlPage.executeJavaScriptFunctionIfPossible(HtmlPage.java:1005)
at com.gargoylesoftware.htmlunit.javascript.host.EventListenersContainer.executeEventHandler(EventListenersContainer.java:208)
at com.gargoylesoftware.htmlunit.javascript.host.EventListenersContainer.executeBubblingListeners(EventListenersContainer.java:228)
at com.gargoylesoftware.htmlunit.javascript.host.Node.fireEvent(Node.java:813)
at com.gargoylesoftware.htmlunit.javascript.host.Node.fireEvent(Node.java:737)
at com.gargoylesoftware.htmlunit.html.HtmlElement$1.run(HtmlElement.java:867)
at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:601)
at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:507)
at com.gargoylesoftware.htmlunit.html.HtmlElement.fireEvent(HtmlElement.java:872)
at com.gargoylesoftware.htmlunit.html.HtmlPage.executeEventHandlersIfNeeded(HtmlPage.java:1268)
at com.gargoylesoftware.htmlunit.html.HtmlPage.initialize(HtmlPage.java:237)
at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseInto(WebClient.java:441)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:309)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:374)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:359)
at com.att.temp.HtmlDelete.submittingForm(HtmlDelete.java:34)
at com.att.temp.HtmlDelete.main(HtmlDelete.java:24)
Caused by: net.sourceforge.htmlunit.corejs.javascript.JavaScriptException: TypeError: Cannot call method "one" of null (https://s.yimg.com/lq/lib/yui-ssl/3.4.1/build/yui/yui-min.js#8)
at net.sourceforge.htmlunit.corejs.javascript.Interpreter.interpretLoop(Interpreter.java:1006)
at net.sourceforge.htmlunit.corejs.javascript.Interpreter.interpret(Interpreter.java:798)
at net.sourceforge.htmlunit.corejs.javascript.InterpretedFunction.call(InterpretedFunction.java:105)
at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.doTopCall(ContextFactory.java:405)
at com.gargoylesoftware.htmlunit.javascript.HtmlUnitContextFactory.doTopCall(HtmlUnitContextFactory.java:275)
at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3031)
at net.sourceforge.htmlunit.corejs.javascript.InterpretedFunction.exec(InterpretedFunction.java:115)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$3.doRun(JavaScriptEngine.java:546)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:654)
... 44 more
JavaScriptException value = TypeError: Cannot call method "one" of null
======= EXCEPTION END ========
== CALLING JAVASCRIPT ==

function () {
if (this.readyState == "loaded" || this.readyState == "complete") {
loadUHJS();
}
}

======= EXCEPTION END ========
== CALLING JAVASCRIPT ==

function () {
var seedfile = "https://s.yimg.com/lq/lib/yui-ssl/3.4.1/build/yui/yui-min.js";
var yui3 = document.createElement("script");
yui3.type = "text/javascript";
yui3.id = "seedfile";
yui3.src = seedfile;
var head = document.getElementsByTagName("head")[0];
head.appendChild(yui3);
yui3.onload = function () {
loadUHJS();
};
yui3.onreadystatechange = function () {
if (this.readyState == "loaded" || this.readyState == "complete") {
loadUHJS();
}
};
loadUHJS = function () {
YUI({combine: true, comboBase: "https://s.yimg.com/lq/combo?", root: "yui-ssl/3.4.1/build/"}).use("node", "event", "event-mouseenter", "substitute", "oop", "node-focusmanager", function (Y) {
});
var hdJS = document.createElement("script");
hdJS.type = "text/javascript";
hdJS.src = "https://s.yimg.com/zz/combo?kx/ucs/sts/js/442/skip-min.js&kx/ucs/uh/js/279/timestamp_library-min.js&kx/ucs/menu_utils/js/164/menu_utils_v2-min.js&kx/ucs/uh/js/267/aria_toolbar-min.js&kx/ucs/username/js/43/user_menu-min.js&kx/ucs/help/js/41/help_menu-min.js&kx/ucs/utility_link/js/20/utility_menu-min.js&kx/ucs/uh/js/262/logo_debug-min.js";
head.appendChild(hdJS);
};
}

======= EXCEPTION END ========

最佳答案

有点奇怪,但是默认的 DOM 解析器对页面上运行的 JS 不满意。使用 htmlunit-2.12,我只是添加了一个特定的浏览器版本 (WebClient webClient = new WebClient(BrowserVersion.FIREFOX_17)) 并让它运行。查看示例代码:

添加以下内容(注意,我关闭了多余的WARNINGS):

import com.gargoylesoftware.htmlunit.BrowserVersion;
----
java.util.logging.Logger.getLogger("com.gargoylesoftware.htmlunit").setLevel(java.util.logging.Level.OFF);
java.util.logging.Logger.getLogger("org.apache.http").setLevel(java.util.logging.Level.OFF);

WebClient webClient = new WebClient(BrowserVersion.FIREFOX_17);

// Get the first page
HtmlPage page1 = webClient.getPage("https://login.yahoo.com/config/login_verify2?.intl=us&.src=ym");

System.out.println(page1.getTitleText());

输出:

Yahoo! Mail: The best web-based email!


编辑:列出了一些错误(未在原始问题中列出)。问题中的错误是转移注意力。消除所有噪音后,您将获得以下内容:

SEVERE: runtimeError: message=[innerHTML is read-only for tag table]

Cannot find function attachEvent in object [object Window]

关于java - 需要帮助在 java 中使用 Htmlunit 登录我的雅虎邮件帐户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17194489/

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