Web 로그인 화면을 띄우고 ID 와 PW를 입력하고 클릭하면 로그인된 화면이 보일 것이다.
이 기능을 C#에서 처리하는 방법이다.
아주 간단하게 기능만 테스트 해 본 거라 username 과 password 를 직접 입력하는 방식으로 구현해봤지만 자동로그인하면서 저장한 값을 불러다가 처리하는 것이 좋을 듯하다.
webBrowser1.Document.GetElementById("username").InnerText = "xxxxx";
대신에
webBrowser1.Document.GetElementById("username").SetAttribute("value", "xxxxx") ;
를 해도 결과는 동일하다.
InvokeMember("click") : 스크립트 언어로 현재 HTML 페이지에 정의된 함수를 실행한다.
WebBrowser 로딩이 끝났을 때 실행해야 한다.
webBrowser1_DocumentCompleted 메소드는 브라우져에 웹페이지가 모두 Load 되었을 때 발생하는 이벤트다.
이것과 동일하게 처리하는 것이
while (webBrowser1.ReadyState != System.Windows.Forms.WebBrowserReadyState.Complete)
{
Application.DoEvents();
}
Web 화면을 읽어오고 나서 Loading 이 완전히 끝나지 않은 상태에서 값을 전달하면 null 에러가 발생한다.
private void Form1_Load(object sender, EventArgs e)
{
// From Web
var url = "http://aaa.com/?r=home&system=iframe.login&iframe=Y&referer=%2F%3F";
webBrowser1.Navigate(url);
webBrowser1.ScriptErrorsSuppressed = true;
while (webBrowser1.ReadyState != System.Windows.Forms.WebBrowserReadyState.Complete)
{
Application.DoEvents();
}
HtmlDocument doc = webBrowser1.Document;
doc.GetElementById("username").InnerText = "xxxxx";
doc.GetElementById("password").InnerText = "yyyyy";
// 특정 엘리먼트를 호출하여 이벤트 처리
webBrowser1.Document.GetElementById("login_btn").InvokeMember("click");
}
private void SuppressScriptErrorsOnly(WebBrowser browser)
{
// Ensure that ScriptErrorsSuppressed is set to false.
browser.ScriptErrorsSuppressed = false;
// Handle DocumentCompleted to gain access to the Document object.
browser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(
webBrowser1_DocumentCompleted);
}
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
((WebBrowser)sender).Document.Window.Error += new HtmlElementErrorEventHandler(Window_Error);
}
private void Window_Error(object sender, HtmlElementErrorEventArgs e)
{
// Ignore the error and suppress the error dialog box.
e.Handled = true;
}
참고하면 도움될 사이트
https://stackoverflow.com/questions/32904235/c-sharp-get-element-by-name
https://stackoverflow.com/questions/16787495/click-on-html-element-by-class-using-webbrowser-c-sharp
'C# > 통신' 카테고리의 다른 글
C# 과 Web (0) | 2018.03.10 |
---|---|
C# Web 접속 로그인함수 만들기(HttpClient 방식) (0) | 2016.11.14 |
C# webFile 다운로드 함수 (0) | 2016.11.12 |
C# GetAsyncDataFromWeb (0) | 2016.08.21 |
C# GetDataFromWeb 사용자 함수 (0) | 2016.08.20 |