일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- AWS
- 도커
- Python
- 리팩토링
- kubernetes
- Winform
- Java
- 코틀린
- git
- 스프링부트
- 리액트
- mybatis
- 자바
- 파이썬
- DataGridView
- machine-learning
- MySQL
- github
- 스프링
- docker
- react
- c#
- springboot
- 마이바티스
- design pattern
- Spring
- Spring Boot
- 쿠버네티스
- VOA
- Kotlin
- Today
- Total
보뇨 다이어리
Winform WebBrowser 내부에 Document 컨트롤하기 본문
이게 아주 기가막힌거여서 포스팅함
윈폼(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
'컴퓨터 관련 > C# 정보' 카테고리의 다른 글
comboBox 내부 string align center 로 맞추기 (4) | 2019.01.07 |
---|---|
dataGridView 안에 특정 Row 감추기 (0) | 2018.12.12 |
Dictionary 클래스에 key 값 정렬하기 (0) | 2018.11.02 |
dataGridView drawing 스크롤에 따라 새로그리기 (0) | 2018.11.01 |
특정 header column 하단 정렬하기 (0) | 2018.10.30 |