2011-02-17 7 views
10

그래서 Mechanize로 시작했는데 가장 먼저 시도한 것은 원숭이 - rhino 수준의 높은 JavaScript 탐색 사이트입니다.제출 버튼을 사용하지 않고 제출 Mechanize

이제 내가 붙어있는 것은 양식을 제출하는 것입니다.

일반적으로 Mechanize 기본 제공 submit() 함수를 사용하여 제출합니다.

import mechanize 

browser = mechanize.Browser() 
browser.select_form(name = 'foo') 
browser.form['bar'] = 'baz' 
browser.submit() 

이렇게하면 HTML 양식에서 사용할 수있는 제출 버튼을 사용하게됩니다.

그러나 내가 붙어있는 사이트는 HTML 제출 버튼을 사용하지 않는 사이트 여야 만했습니다 ... 아니요, 그들은 JavaScript 전문가가 되려고 노력 중이며 JavaScript를 통해 제출합니다.

보통 submit()은 이와 관련이없는 것 같습니다.

그래서 ...이 문제를 해결할 방법이 있습니까?

도움을 주시면 감사하겠습니다. 많은 감사합니다!

- [편집] -

자바 스크립트 기능 내가 붙어에 : 나는 파이썬에서했던 (그리고 무엇을 작동하지 않습니다) 무엇

function foo(bar, baz) { 
    var qux = document.forms["qux"]; 

    qux.bar.value = bar.split("$").join(":"); 
qux.baz.value = baz; 
qux.submit(); 
} 

:

def foo(browser, bar, baz): 
    qux = browser.select_form("qux") 

    browser.form[bar] = ":".join(bar.split("$")) 
    browser.form[baz] = baz 
    browser.submit() 

답변

11

세 가지 방법 :

POST/GET 메서드를 사용하여 양식을 제출하면 첫 번째 방법이 바람직합니다. 그렇지 않으면 h 두 번째 및 세 번째 방법에 리조트.

  1. 양식을 수동으로 제출하고 POST/GET 요청, 매개 변수 및 양식을 제출하는 데 필요한 게시 URL을 확인하십시오. 헤더를 검사하기위한 인기있는 도구는 Firefox 용 Live HTTP 헤더 확장 및 Firebug 확장 프로그램과 Chrome 용 개발자 도구 확장 프로그램입니다. POST/GET 메소드를 사용하는 예 :

    import mechanize 
    import urllib 
    
    browser = mechanize.Browser() 
    #These are the parameters you've got from checking with the aforementioned tools 
    parameters = {'parameter1' : 'your content', 
           'parameter2' : 'a constant value', 
           'parameter3' : 'unique characters you might need to extract from the page' 
          } 
    #Encode the parameters 
    data = urllib.urlencode(parameters) 
    #Submit the form (POST request). You get the post_url and the request type(POST/GET) the same way with the parameters. 
    browser.open(post_url,data) 
    #Submit the form (GET request) 
    browser.open(post_url + '%s' % data) 
    
  2. 자바 스크립트를 재 작성 파이썬에서 실행

    . 스파이더 맨 키를 확인하십시오.

  3. 풀 브라우징 기능을 사용하십시오. Selenium and Windmill을 확인하십시오.

관련 문제