보뇨 다이어리

Winform WebBrowser 내부에 Document 컨트롤하기 본문

컴퓨터 관련/C# 정보

Winform WebBrowser 내부에 Document 컨트롤하기

보뇨 2018. 11. 29. 13:56
반응형

이게 아주 기가막힌거여서 포스팅함


윈폼(winform) 에 있는 WebBrowser 를 사용하여 예를들어 네이버 로그인할려고할때 로그인 아이디와 패스워드를 기억해서(기억하다는건 단순히 static 으로 가진다고 생각하자) 현재 이창이 종료되도 나중에 WebBrowser 를 새로 연다고해도 그 아이디와 패스워드가 해당 텍스트박스에 자동으로 기입되도록 코딩하는것이다. 백문이 불여일견이라고 코드와 사진을 보자


코드를 우선 보면 11~15번까지는 네이버이동이라는 버튼의 역할이다 뭐...보시다시피 별거없다

그다음 중요한건 17~27번까지는 웹페이지가 모두 로딩될때 발생하는 메소드이다 19번줄에 focus 이벤트를 달아주었다.

원래 Click 이벤트를 달아줬는데 keyboard 나 tab 키를 사용할경우 Click 이벤트가 먹히지않기때문에 focus 로 하게 되었다

22,23번은 특정 id에 해당하는 element 를 가져와서 24,25번줄처럼 value 에 해당하는부분에 2번째 파라미터처럼 넣어주면 된다

여기서 value 란 사진으로 첨부한다



29~38번하고 40~49번줄은 조작할때 마우스로 클릭할수도 있고 키보드로 컨트롤할수도있기때문에 2개를 만들어주었다

원래 하나의 메소드로 처리해도되지만 일단 이런식으로 할수있다는것만 알아두면된다

추가적으로 innerText 를 써서 텍스트박스쪽에 원하는 문자열을 넣을수도 있는데 어떤사이트는 그런식으로 들어오는것을 placeholder 처리하는곳이 있기때문에 보편적으로 SetAttribute 를 사용하는것이 좋을것이다 그럼 ~~빠잉


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
    public partial class Form1 : Form
    {
        private string user_id = "";
        private string user_pw = "";
 
        public Form1()
        {
            InitializeComponent();
        }
 
        private void btnGo_Click(object sender, EventArgs e)
        {
            string url = "https://nid.naver.com/nidlogin.login";
            webBrowser1.Navigate(url);
        }
 
        private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            webBrowser1.Document.Focusing += new HtmlElementEventHandler(Document_Click);
            if (webBrowser1.DocumentTitle == "네이버 : 로그인")
            {
                HtmlElement searchBox = webBrowser1.Document.GetElementById("id");
                HtmlElement searchBox2 = webBrowser1.Document.GetElementById("pw");
                searchBox.SetAttribute("value""tom");
                searchBox2.SetAttribute("value""1234");
            }
        }
 
        private void Document_Click(object sender, HtmlElementEventArgs e)
        {
            if (webBrowser1.Document.ActiveElement.TagName == "BUTTON")
            {
                dynamic ee = webBrowser1.Document.GetElementById("id").DomElement;
                user_id = ee.value;
                dynamic dd = webBrowser1.Document.GetElementById("pw").DomElement;
                user_pw = dd.value;
            }
        }
 
        private void webBrowser1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                dynamic ee = webBrowser1.Document.GetElementById("id").DomElement;
                user_id = ee.value;
                dynamic dd = webBrowser1.Document.GetElementById("pw").DomElement;
                user_pw = dd.value;
            }
        }
    }
cs



출처

http://www.csharpstudy.com/WinForms/WinForms-webbrowser.aspx

https://stackoverflow.com/questions/2187114/how-to-fill-webbrowser-textboxs

https://stackoverflow.com/questions/24091944/how-to-get-html-textbox-value

https://stackoverflow.com/questions/14681335/setting-value-of-an-input-tag-in-webbrowser-control

http://taejusoul.tistory.com/284

반응형