private void WebBrowserRmtDocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { if (sender == null) { return; } if (e == null) { return; } if (e.Url == null) { return; } if (e.Url.ToString() == InstagramUri.ToString() && !IsWebBrowserInUse) { // Get cookies from WebBrowser var cookies = GetUriCookies(InstagramUri); // Pass web browser document source and cookies to this function: // NOTE: Don't use WebBrowserRmt.Document.Cookie to get cookies because it's not getting full cookies var result = InstaApi.SetCookiesAndHtmlForChallenge(WebBrowserRmt.DocumentText, cookies); // You are logged in if (result.Succeeded) { Text = $"{AppName} Connected"; // Save session var state = InstaApi.GetStateDataAsStream(); using (var fileStream = File.Create(StateFile)) { state.Seek(0, SeekOrigin.Begin); state.CopyTo(fileStream); } } else { // there is an unknown error. Text = $"{AppName} couldn't login"; } Thread.Sleep(1500); WebBrowserRmt.Stop(); WebBrowserRmt.Visible = false; IsWebBrowserInUse = true; Size = NormalSize; } }
private async void LoginButtonClick(object sender, EventArgs e) { // NOTE 1: I've added a WebBrowser control to pass challenge url and verify your account // Yout need this because you have to get cookies and document source text from webbrowser // and pass it to SetCookiesAndHtmlForChallenge function. var userSession = new UserSessionData { UserName = txtUser.Text, Password = txtPass.Text }; InstaApi = InstaApiBuilder.CreateBuilder() .SetUser(userSession) .UseLogger(new DebugLogger(LogLevel.Exceptions)) .SetRequestDelay(RequestDelay.FromSeconds(0, 1)) .Build(); Text = $"{AppName} Connecting"; try { if (File.Exists(StateFile)) { Debug.WriteLine("Loading state from file"); using (var fs = File.OpenRead(StateFile)) { InstaApi.LoadStateDataFromStream(fs); } } } catch (Exception ex) { Debug.WriteLine(ex); } if (!InstaApi.IsUserAuthenticated) { var logInResult = await InstaApi.LoginAsync(); if (!logInResult.Succeeded) { if (logInResult.Value == InstaLoginResult.ChallengeRequired) { // Get challenge information var instaChallenge = InstaApi.GetChallenge(); IsWebBrowserInUse = false; WebBrowserRmt.Visible = true; // Navigate to challenge Url WebBrowserRmt.Navigate(instaChallenge.Url); Size = ChallengeSize; } } else { Text = $"{AppName} Connected"; // Save session var state = InstaApi.GetStateDataAsStream(); using (var fileStream = File.Create(StateFile)) { state.Seek(0, SeekOrigin.Begin); state.CopyTo(fileStream); } } } else { Text = $"{AppName} Connected"; } }