2016-08-02 2 views
1

검색 양식을 제출 한 후 웹 사이트에서 일부 작업을 수행해야합니다. 문제는 브라우저를 통해이 작업을 수행 할 때 페이지가 다시로드되지 않고 어디에서나 리디렉션됩니다. 링크가 변경되지 않아도 검색 결과 아래에 결과가 표시됩니다 (새 페이지에서 볼 수 있음). html.Python3 : MechanicalSoup을 통해 양식을 제출할 때 아무런 변화가 없습니다.

import mechanicalsoup 

def fetchfile(query): 

    url = "http://www.italgiure.giustizia.it/sncass/" 

    browser = mechanicalsoup.Browser() 
    page = browser.get(url) 
    search_form = page.soup.find("form", {"id": "z-form"}) 
    search_form.find("input", {"id":"searchterm"})["value"] = query 
    response = browser.submit(search_form, page.url) 

    print(response) # the response is 200, so it should be a good sign 

    # actual parsing will come later... 
    print("1235" in response.text) # quick-check to see if there is what I'm looking for, but I get False 

    # in fact this... 
    print(page.text == response.text) # ...gives me True 

fetchfile("1235/2012") 

내가 할 수있는 : 하지만 코드를 다음 사용하면 내가 응답에 있어야합니다 "새로운"페이지의 HTML을 볼 수는 (제공된 링크는 실제로 작동하도록 노력하고있어 하나입니다) 내가 빠진 것을 이해하지 못한다. 차라리 셀레늄을 사용하지 않을 것입니다. 모든 단서?

답변

0

방금 ​​같은 문제로 어려움을 겪었습니다. 나는 또한 Python을 처음 접했기 때문에 설명하려고 노력한다.

페이지의 요소를 "찾았으나 양식 검색 결과를 가져 와서 양식 개체로 변환해야 양식 개체의 값을 설정하고 제출할 수 있습니다. 양식 값이 실제로 설정되지 않아 항목을 제출 한 후에 다시 돌아 오지 않는 이유는 검색 만하는 것입니다. 나는이 질문이 오래되었다는 것을 알고있다. 그러나 잘하면 이것은 다른 사람들에게도 도움이 될 것이다. "쿼리"의 실제 가치가 무엇인지 알지 못하기 때문에 작동하는지 확인할 수는 없지만 프로그램에서 사용한 방법입니다. 답에 대한

import mechanicalsoup 
import html5lib 
from bs4 import BeautifulSoup 

def fetchfile(query): 

    url = "http://www.italgiure.giustizia.it/sncass/" 

    browser = mechanicalsoup.Browser() 
    page = browser.get(url) 

    # Using page.find() with the appropriate attributes is also useful 
    # for forms without names 
    FORM = mechanicalsoup.Form(page.find('form', attrs={'id': 'z-form'})) 

    FORM["searchterm"] = query 

    # You can verify the form values are set by doing this: 
    print("Form values: ", vars(FORM)) 

    response = browser.submit(FORM, url) 

    print(response) # the response is 200, so it should be a good sign 
    Results = browser.get_current_page() 
    print("Results: ", Results) 

    # actual parsing will come later... 
    # quick-check to see if there is what I'm looking for, but I get False 
    # print("1235" in response.text) 

    # in fact this... 
    print(page.text == response.text) # ...gives me True 

# fetchfile("1235/2012") 
+0

덕분에, 그러나 결국 나는 결과를 제출 한 후 i는 PDF 파일을 다운로드 할 필요가 있기 때문에, 셀레늄을 사용했다 ... 그리고 셀레늄 및 "클릭을 사용하는 것보다 다른 방법이없는 것 같다 "그 결과. 내 새로운 문제는 robots.txt이지만, 만약 내가 따르고 싶다면 내가 할 수있는 일은 거의 없다. –

관련 문제