0
나는 다음과 같은 코드를 사용하여 파이썬에서 http://apps.fas.usda.gov/esrquery/esrq.aspx에 양식을 제출하려고 :제출 양식
이import urllib
from bs4 import BeautifulSoup
import mechanize
import datetime
today = datetime.date.today().strftime("%m/%d/%Y")
url = 'http://apps.fas.usda.gov/esrquery/esrq.aspx'
html = urllib.urlopen(url).read()
soup = BeautifulSoup(html)
viewstate = soup.find('input', {'id' : '__VIEWSTATE'})['value']
eventval = soup.find('input', {'id' : '__EVENTVALIDATION'})['value']
br = mechanize.Browser(factory=mechanize.RobustFactory())
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
br.open(url)
# fill form
br.select_form("aspnetForm")
br.form.set_all_readonly(False)
br.form['__EVENTTARGET'] = ''
br.form['__EVENTARGUMENT'] = ''
br.form['__LASTFOCUS'] = ''
br.form['__VIEWSTATE'] = viewstate
br.form['__VIEWSTATEGENERATOR'] = '41AA5B91'
br.form['__EVENTVALIDATION'] = eventval
br.form['ctl00$MainContent$lbCommodity'] = ['401']
br.form['ctl00$MainContent$lbCountry'] = ['0:0']
br.form['ctl00$MainContent$ddlReportFormat'] = ['10']
br.find_control('ctl00$MainContent$cbxSumGrand').items[0].selected = True
br.find_control('ctl00$MainContent$cbxSumKnown').items[0].selected = False
br.form['ctl00$MainContent$rblOutputType'] = ['2']
br.form['ctl00$MainContent$tbStartDate'] = '01/01/1999'
br.form['ctl00$MainContent$ibtnStart'] = ''
br.form['ctl00$MainContent$tbEndDate'] = today
br.form['ctl00$MainContent$ibtnEnd'] = ''
br.form['ctl00$MainContent$rblColumnSelection'] = ['regular']
response = br.submit()
내가 무엇입니까 응답은 본질적으로 양식 사이트의 바로 HTML 코드를 예상대로 채 웁니다. 그러나, 나는 엑셀 파일을 기대하고 있었다. (OutputType 값을 2로 선택했기 때문에)
제출 앞면에 뭔가 빠져 있다고 생각한다. 누군가 내가 놓친 것에 대해 밝힐 수 있습니까?
이렇게하면 응답은 .xls 파일 (내 경로대로)에 html (양식이 올바르게 채워져 있음)을 쓰고 있습니다. 제출과 관련하여 여전히 문제가있는 것으로 보입니다. 내가 알아 차 렸던 것은 출력물에 날짜 입력을위한 달력 이미지가 열려 있다는 것입니다. 이것이 문제의 원인이 될 수 있습니까? 빈 입력으로 남긴 'ctl00 $ MainContent $ ibtnStart'및 'ctl00 $ MainContent $ ibtnEnd'컨트롤이 있습니다. 그것이 잠재적으로 문제를 일으킬 수 있습니까? – rccommods
제프에서 더 이상 도움을받을 수 있습니까? – rccommods
제출하는 데 문제가있는 것 같지만 이유는 확실하지 않습니다. 예를 들어, 'for cont br.controls : print cont.name'을 수행하면 폼을 선택한 후에 submit 컨트롤의 이름을 볼 수 있지만'name = ...' 제출하면, 그것을 보지 못한다고합니다. 또한 파일에 기록하는 출력은 검색 결과가 아닌 기본 페이지이며 설정 한 내용이나 컨트롤에 설정하지 않은 내용은 변경되지 않습니다. 응답을 제출하고 읽으려고해도 시작 페이지에 계속 표시됩니다. 이 질문을 다른 질문으로 만들어야 할 수도 있습니다. – Jeff