2012-04-26 5 views
3

やあみんな、ハウツー取引(__VIEWSTATE)

あなたが要求しようとしているとき、私は(不可解な「__VIEWSTATE」&ルシに対処する方法を把握しようとしていましたPOST)Pythonでページを作る!私のスクリプトの多くの問題の主な原因は...そして、私が答え/ソリューションを探していたときには、それほど多くの解決策(ほとんど0!)がないことを認識しています。 Unable to load ASP.NET page using Python urllib2 あなたは、私はすべての時間はあなたが働くのページ...をロード不可解なフィールドの値を解析することからなると私の解決策を与えているが、それは実際には非常に愚かだと見ることができます。このトピックで

: - )

for result in the_page.findAll('input', attrs={'name' : '__VIEWSTATE'}): 
     view_state = result['value'] 

    for result_1 in the_page.findAll('input', attrs={'name' : '__EVENTVALIDATION'}): 
     event_validation = result_1['value'] 

    for result_2 in the_page.findAll('input', attrs={'name' : '__PREVIOUSPAGE'}): 
     previous_page = result_2['value'] 

    for result in the_page.findAll('input', attrs={'name' : '__EVENTTARGET'}): 
     event_target = result['value'] 

以降:

url = 'http://bandscore.ielts.org/search.aspx' 
    values = { 
          '__EVENTTARGET' : 'gdvSearchResults', 
          '__EVENTARGUMENT' : page, 
         '__VIEWSTATE' : view_state, 
         '__PREVIOUSPAGE' : previous_page, 
         '__EVENTVALIDATION' : event_validation, 
         'DropDownList1' : Country, 
         #'txtSearchInstitution' : '', 
         #'hdnSearchText' : '', 
         #'rdoFilter': '%25', 
    } 
    user_agent = 'Mozilla/5 (Solaris 10) Gecko' 
    headers = { 'User-Agent' : user_agent } 
    data = urllib.urlencode(values) 
    req = urllib2.Request(url, data, headers) 
    response = urllib2.urlopen(req) 
    thePage = response.read() 
    the_page = soup(thePage) 

だからここには良い説明といくつかのより多くのリンク/いくつかは、解決策を提案している:

What does the __VIEWSTATE hold?

http://aspalliance.com/articleViewer.aspx?aId=135&pId=

http://msdn.microsoft.com/en-us/library/system.web.ui.losformatter.aspx

http://weblogs.asp.net/infinitiesloop/archive/2006/08/03/Truly-Understanding-Viewstate.aspx

http://msdn.microsoft.com/en-us/library/ms972976.aspx

Mechanize does not see some hidden form inputs?

Unable to load ASP.NET page using Python urllib2

は、私はすべて一緒に;-)

EDIT1、多くの人がそれに対処するための良い方法を見つけようとしていることを認識し、それでは、良い解決策を見つけるために試してみましょう:あまりにもことがわかりました、それに対処する方法

答えて

1

(申し訳ありませんが良い情報の完全ではない/フルでこのポストである...私はかなりN00Bが、私は努力)

http://code.google.com/p/peekviewstate/source/browse/trunk/src/peekviewstate_example.py面白いかもしれませんか?サーバがあなたに送る不透明なデータとして __VIEWSTATEを考えてください。それは与えられたページとそれのオブジェクトの状態に関するいくつかの特定のデータを含んでいます、そして、私はあなたにそれを修正することを本当に勧めません。

一部のASP.NETアプリケーションでブラウザを使用してエミュレートする場合は、POSTリクエストにそれらを含める必要があるため、サーバーはページの状態を再構築できます。

原因は何ですか?私はあなたのソリューションはかなり簡単だと思います。

Btw、ちょっとしたメモ - 多くのASP.NETアプリケーションにはパブリックAPIが含まれています。このAPIはページを解析する代わりに使用できます。