如何在C#.net中使用awesomium登录Google帐户
本文关键字:awesomium 登录 Google 帐户 net | 更新日期: 2023-09-27 18:30:23
我正在尝试以awesomium登录 https://accounts.google.com,但是单击下一步按钮后设置密码字段时出错。
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading;
using Awesomium.Core;
namespace ConsoleApplication4
{
class Program
{
static void Main(string[] args)
{
var session = WebCore.CreateWebSession(new WebPreferences { WebSecurity = false });
using (WebView webViewBrowser = WebCore.CreateWebView(1024, 768, session, WebViewType.Offscreen))
{
webViewBrowser.ConsoleMessage += webViewBrowser_ConsoleMessage;
webViewBrowser.LoadingFrameComplete += webViewBrowser_LoadingFrameComplete;
webViewBrowser.Source = new Uri("http://www.blogger.com/");
if (WebCore.UpdateState == WebCoreUpdateState.NotUpdating) WebCore.Run();
Console.ReadKey();
}
}
static void webViewBrowser_ConsoleMessage(object sender, ConsoleMessageEventArgs e)
{
Debug.Print("{0} at {1}: {2} at '{3}'", e.EventName, e.LineNumber, e.Message, e.Source);
}
static void webViewBrowser_LoadingFrameComplete(object sender, FrameEventArgs e)
{
if (!e.IsMainFrame) return;
WebView webViewBrowser = sender as WebView;
Console.WriteLine(String.Format("Page Title: {0}", webViewBrowser.Title));
Console.WriteLine(String.Format("Loaded URL: {0}", webViewBrowser.Source));
dynamic Email = (JSObject)webViewBrowser.ExecuteJavascriptWithResult("document.getElementById('Email');");
Email["value"] = "test@gmail.com";
dynamic btn = (JSObject)webViewBrowser.ExecuteJavascriptWithResult("document.getElementById('next');");
btn.click();
dynamic Passwd = (JSObject)webViewBrowser.ExecuteJavascriptWithResult("document.getElementById('Passwd');");
Passwd["value"] = "pass007";
btn = (JSObject)webViewBrowser.ExecuteJavascriptWithResult("document.getElementById('signIn');");
btn.click();
BitmapSurface surface = (BitmapSurface)webViewBrowser.Surface;
surface.SaveToPNG("result.png", true);
WebCore.Shutdown();
}
}
}
行上的异常 Passwd["value"] = "pass007";:
类型为"System.InvalidOperationException"的异常发生在 Awesomium.Core.dll但未在用户代码中处理
其他信息:您不能在 无效(未定义)对象。
输入电子邮件并单击"下一步"按钮后,页面进行 AJAX 调用以检查电子邮件的有效性,并且仅当它确实存在时,才会在 DOM 中创建输入密码元素。这需要一些时间。
在您的代码中,单击"下一步"后立即检索输入密码元素,该元素尚不存在,因此例外:
不能对无效(未定义)对象执行此操作。
解决方案是在设置值之前等待元素存在,例如使用循环,或者如果您很懒惰,Thread.Sleep 可能就足够了,尽管这不是推荐的做法。