링크가 웹 페이지에 자바 스크립트 함수를 호출이며,이 같은이라고 "모두 표시"
__doPostBack('ctl00$ContentPlaceHolder1$PGN01','')
내 기본 브라우저는 파이어 폭스이며, 우수한있다 추가 기능을 사용할 수 있습니다. "웹 개발자"부가 기능을 사용했습니다.
페이지가있는 탭에서 다음을 수행하십시오. 마우스 커서를 모두 표시 링크 위로 가져갑니다. 그런 다음 마우스 오른쪽 버튼을 클릭하고 "웹 개발자"> "정보"> "자바 스크립트보기 Alt + Shift + J"를 선택하십시오. 그러면 Firefox는 페이지가 사용하는 모든 자바 스크립트가있는 새 탭을 엽니 다. - 탭에서
는 빠른 검색은 다음과 같이 코딩되어있는 __doPostBack 함수를 찾습니다 경우 JavaScipt 기능이 아래의 자바 스크립트 코드로 감소 할 수
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
은 if-statemment들을 평가에서 테스트 함수를 호출하는 인수를 사용합니다.
theForm.__EVENTTARGET.value = 'ctl00$ContentPlaceHolder1$PGN01';
theForm.__EVENTARGUMENT.value = '';
theForm.submit();
이제 우리는 'theForm'이 무엇인지 알아야합니다.
아래 바로 __doPostBack 기능 이상 발견 된 코드 : 우리가 지금 'theForm은'id 속성을 가진 '형태'HTML 태그에 대한 참조 점이다 알고에서
var theForm = document.forms['aspnetForm'];
if (!theForm) {
theForm = document.aspnetForm;
}
'aspnetForm'(ID = 'aspnetForm') HTML 문서에서 우리는 다음과 같이 시작 무언가를 찾아 놈이야 것을 의미 :
<form id="aspnetForm"
그 태그는 I가 파이어 폭스 브라우저를 사용 작성하는 방법을 정확히 알고 관심있는 페이지의 수정 된 HTML을보십시오. 여기 FireBug 애드온을 사용하고 있습니다.
HTML 양식의 시작 태그는 다음과 같습니다
<form id="aspnetForm" onsubmit="javascript:return WebForm_OnSubmit();"
action="/Shoes-All.aspx" method="post" name="aspnetForm">
그래서 액션이 같은 HTML 문서를 사용합니다!
function WebForm_OnSubmit() {
if (typeof(ValidatorOnSubmit) == "function" && ValidatorOnSubmit() == false)
return false;
return true;
}
은 우리가 ValidatorOnSubmit() 함수를 살펴 그것을 사용하고 흥미로운 변수를 보자 :
은 우리가 WebForm_OnSubmit() 함수가 무엇을하고 있는지 보자
var Page_ValidationActive = false;
// ...
function ValidatorOnSubmit() {
if (Page_ValidationActive) {
return ValidatorCommonOnSubmit();
}
else {
return true;
}
}
즉,이 함수는 항상 'true'를 반환하므로 양식 시작 태그를
01로 다시 쓸 수 있습니다.
<form id="aspnetForm" onsubmit="javascript:return true;"
action="/Shoes-All.aspx" method="post" name="aspnetForm">
웹 페이지가 웹 서버에서 다시로드되어야한다고 결론 지을 수 있습니다.
이제 우리는 HTTP POST 요청에 사용되는 변수와 값을 알아야합니다.
자바 스크립트를 사용하여 Firefox를 다시 사용했습니다. 또한 멋진 Firebug 애드온을 사용하고 있습니다. 첫 번째 div 태그의 양식 요소에서 우리는이 발견 : 당신이 우리의 이전 감소 자바 스크립트 코드를 기억한다면, 그것은 형태로이 입력 태그의 value 속성 때문에, HTML을 수정
<div>
<input id="__EVENTTARGET" type="hidden"
value="" name="__EVENTTARGET">
<input id="__EVENTARGUMENT" type="hidden" value="" name="__EVENTARGUMENT">
<input id="__LASTFOCUS" type="hidden" value="" name="__LASTFOCUS">
<input id="__VIEWSTATE" type="hidden"
value="(lots of data here)" name="__VIEWSTATE">
</div>
그 함수에 의해 modfied되어 있었다, 그래서 정말 :
<div>
<input id="__EVENTTARGET" type="hidden"
value="ctl00$ContentPlaceHolder1$PGN01" name="__EVENTTARGET">
<input id="__EVENTARGUMENT" type="hidden" value="" name="__EVENTARGUMENT">
<input id="__LASTFOCUS" type="hidden" value="" name="__LASTFOCUS">
<input id="__VIEWSTATE" type="hidden"
value="(lots of binary data here)" name="__VIEWSTATE">
</div>
당신은 물론 ID가 "_VIEWSTATE"로 입력 태그의 값 속성의 콘텐츠를 그대로 복사 할 필요가있을 것이다. ,
form#aspnetForm div input#__VIEWSTATE
웹 서버에서 모든 항목을 다운로드 한 후 다음의 CSS 선택기가
//*[@id="__VIEWSTATE"]
... 것을 :
참고로, 파이어 폭스는 _VIEWSTATE 입력 - 태그의 XPath는 말 그런 다음 HTML 페이지를 파싱합니다.
흥미로운 콘텐츠는 내부 깊숙이 형태로 포함되어 있습니다. HTML 표입니다. =
//*[@id="ctl00_ContentPlaceHolder1_dlList"]
... 그리고 CSS 선택기
table#ctl00_ContentPlaceHolder1_dlList
는 그것은 TBODY, TR, TD, DIV, 다른 테이블 (이 포함되어 있습니다 :
테이블에 대한 관련 XPath는이다 더 나쁜 디자인 - 누군가가 테이블이없는 디자인에 대해 배울 필요가 있습니다. 스마트 폰과 태블릿에서 HTML 표가 끔찍하게 보일 것입니다.)이 시점에서 Beautiful Soup 4 파서를 작업에 적용해야한다고 생각합니다.
당신이 썼던 것을 "공부하다"가 끝나자, 버튼이 모두 "aspnetForm"형식의 hte input __EVENTTARGET의 속성 "value"를 수정했다는 것을 알았습니다. 그리고 나서 html이 바뀌 었습니다. 하지만 왜 나는 "__VIEWSTATE"입력의 속성 값의 내용을 복사해야하는지 이해하지 못합니다. 왜 서버에서 일부 항목을 다운로드해야합니까? 기본적으로 링크가 아니기 때문에 스파이더가이 수정 된 HTML을 구문 분석하게 만드는 방법을 모르겠습니다. (나는이 모든 것에 매우 익숙하며 새로운 URL 대신 수정 된 HTML을 크롤링하는 방법이 있는지 전혀 모른다.) – 700z
고마워요! – 700z