HTMLAgilityPack을 사용하여 웹 사이트에 로그인

c# html-agility-pack login login-script

문제

아래 코드에서 HTMLAgilitypack을 사용하여 사용자 이름과 비밀번호의 값을 설정할 수 있지만 로그인 버튼의 click 이벤트 (버튼의 소스 코드에서 ID는 "s1")를 호출 할 수 없습니다.

어쨌든 이것을 할 수 있습니까? WebBrowser 사용하지 않는 이유는 소스 코드에서 ID없이 페이지에서 데이터를 검색하기 위해 HTMLAgilityPack이 필요하기 때문입니다.

var doc = new HtmlWeb().Load("http://MYURL.com");
doc.DocumentNode.SelectSingleNode("name").SetAttributeValue("value", "MyUsername");
doc.DocumentNode.SelectSingleNode("password").SetAttributeValue("value", "MyPassword");

수락 된 답변

어쨌든 이것을 할 수 있습니까?

HTML Agility Pack (HAP) 라이브러리가 제공하는 것이 아니라 직접적으로 사용할 수 있습니다.

HAP은 단일 페이지를 가져 와서 구문 분석하는 데 적합하지만 지속적인 상호 작용을 위해 설계되지 않았습니다. 누락 된 부분은 쿠키 관리, JavaScript 상호 작용 등입니다.

로그인하려면 원하는 데이터를 포함하여 서버에 HTTP POST를 보내야합니다. HAP은이를 지원할 수 없습니다.

게시를 만들기 위해 WebRequest 와 같은 클래스를 사용해야 할 것입니다. 피들러 를보고이를 사용하여 요청이 어떻게 보일지 확인하고 적절히 구성하는 것이 좋습니다.하지만 첫 번째 단계 일 수 있습니다.

셀레늄 또는 WatiN 과 같은 웹 자동화 도구의 사용을 조사하는 것이 좋습니다.


인기 답변

바이올린을 통해 POST 요청을 관찰하고 구조가 어떻게되는지 확인해야합니다. 예 :

    {"userName":"you","password":"pwd"}

일반적으로 사이트는 사용자의 요청에 따라 쿠키를 수신하여 로그인했음을 인식합니다.

HttpClient 는 기본적으로 각 순차 요청과 함께 특정 도메인에서받은 쿠키를 해당 도메인에 보냅니다 (해당 HttpClient 인스턴스를 삭제할 때까지)

1) 쿠키 컨테이너를 만들어 HttpClient 인스턴스에 할당합니다.

2) HttpClient를 사용하여 로그인 POST 요청을 작성하십시오.

3) HttpClient를 사용하여 데이터를 GET 요청하십시오.

4) 응답에서 html 문자열을 읽습니다.

5) HtmlAgilityPack HtmlDocument를 사용하면 웹이 아닌 HTML 문자열에서 문서를로드 할 수 있습니다 (대부분의 예제에서 볼 수 있듯이).

    {"userName":"you","password":"pwd"}



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.