2014-04-16 4 views
2

다음 작업을 수행해야합니다. 서버에서로드 된 페이지가 있으면로드 한 후 자동으로 해당 페이지의 양식을 제출하고 모든 입력 필드를 채워야합니다. 같은 문자열 (test worked). 이것은 분명히 내 문제의 단순화이지만 충분히 가깝습니다! 순간 cheerio (예 : JQuery)와 함께 자동으로 쿼리 제출하기

나는 양식을 얻고, 그것을 탐구하는 https://github.com/cheeriojs/cheerio을 사용하고 있습니다 : 순간

var URL = http://www.example.com/form/index.html" 
// ...load the page ... 
$ = cheerio.load(fetchedPageText); 

, 나는 다음과 같은 코드가 있습니다

var $ = cheerio.load(fetchedPageText); 

var forms = $('form'); 
for(var i1 = 0, l1 = forms.length; i1 < l1; i1 ++){ 
    var form = forms[ i1 ]; 

    inputFields = $('input', form); 


    console.log("******FORM ACTION: ", form.attribs.action); 
    console.log("******FORM: ", form); 

    for(var i2 = 0, l2 = inputFields.length; i2 < l2; i2 ++){ 
    var inputField = inputFields[ i2 ]; 

    console.log(inputField); 
    console.log("**************INPUT FIELD ", inputField); 


    /* At this point, I have `action` and every input field */ 


    } 
}; 

질문 :

  • 현재 submit은 페이지를 기준으로합니다. 나는 다운 드레드를 가지고 있습니다. 디. 올바른 장소에 물건을 제출하는 방법은 무엇입니까? url.parse를 수행하고 URL에서 액션에 대한 갈매기 경로를 찾아야합니까?

  • 실제로 "게시물"문자열을 어떻게 만듭니 까? 또는이 양식을 어떻게 게시 하시겠습니까?

  • 나는 이것이 작동하지 않을 수도 있음을 깨닫는다. (폼에는 Javascript가있을 수있다. 그러나이 양식을 제출할 때 조심해야 할 것이 있습니까?

답변

8

양식을 올바른 주소로 게시하려면 페이지의 기본 URL과 게시 속성의 URL을 결합해야합니다. url.resolve(from, to) 도울 수 있습니다.

양식을 게시하려면 예를 들어. http://visionmedia.github.io/superagent/ 또는 일부 다른 아약스 라이브러리 application/x-www-form-urlencoded

많은 사이트가 다양한 스팸 방지 대책을 적용하고 올바르게 구성되지 않은 경우 요청을 거부한다는 점을 알아야합니다. 사이트별로 확인해야합니다.

대량 메일 발송 또는 대량 양식 제출은 일부 국가에서 법으로 기소됨을인지해야합니다.

JSON 및 REST 또는 SOAP을 기반으로 제 3 자 (다른 사람은 HTML 양식을 구문 분석하지 않음)에서 사용하는 것이 훨씬 쉬운 API가 보통이라는 것을 알고 있어야합니다.

웹 서버에 페이지를 제출해야하는 경우 합법적으로 더 나은 옵션은 서버 소유자와 다른 API를 협상하는 것입니다. 정부 서버에서도 문제가되어서는 안됩니다. Open Data 이니셔티브 (미국, 유럽, 인도 ...)로 인해 개장합니다.

+1

스팸 문제에 대해 걱정할 필요가 없습니다. 저는 스패머가 아닙니다. API는 변경할 수 없지만 괜찮습니다. superAgent 링크를 주셔서 감사합니다. – Merc

+0

내 평판 점수를 올리신 것에 대해 감사드립니다. – xmojmr

+0

스택 오버플로 환영 : D – Merc