如何在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但未在用户代码中处理

其他信息:您不能在 无效(未定义)对象。

如何在C#.net中使用awesomium登录Google帐户

输入电子邮件并单击"下一步"按钮后,页面进行 AJAX 调用以检查电子邮件的有效性,并且仅当它确实存在时,才会在 DOM 中创建输入密码元素。这需要一些时间。

在您的代码中,单击"下一步"后立即检索输入密码元素,该元素尚不存在,因此例外:

不能对无效(未定义)对象执行此操作。

解决方案是在设置值之前等待元素存在,例如使用循环,或者如果您很懒惰,Thread.Sleep 可能就足够了,尽管这不是推荐的做法。