2016-01-15 59 views
1

我试图用awesomium登录到https://accounts.google.com,但在单击下一个按钮后设置密码字段时出错。如何在C#中使用awesomium登录谷歌帐户.net

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"] = "[email protected]"; 

      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 [ “值”] = “pass007” 异常;:

'System.InvalidOperationException' 类型的异常出现在 Awesomium.Core.dll但在没有处理用户代码

附加信息:不能对 无效(未定义)对象执行此操作。

回答

1

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

在您的代码,您检索输入密码元素单击“下一步”,至今尚未存在,因此异常后立即:

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

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

相关问题