3

Pythonでページをリクエスト(POST)しようとしているときに、不可解な「__VIEWSTATE」とCieを処理する方法を理解しようとしていました。それは私のスクリプトの多くの問題の主な原因です...そして私が答え/解決策を探していたとき、あなたはそれほど多くの解決策を持っていないことに気づきました(ほとんど0!)。

このトピックの内容: Python urllib2を使用してASP.NETページを読み込めないページを読み込む たびに不可解なフィールドの値を解析することで解決策を提供していることがわかります...これは機能しますが、実際には非常に愚かです:-)

    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)

だからここに良い説明のあるいくつかのリンクがあります/いくつかは解決策を提案しています:

__VIEWSTATEは何を保持しますか?

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はいくつかの隠されたフォーム入力を見ませんか?

Pythonurllib2を使用してASP.NETページを読み込めません

多くの人がそれに対処するための良い方法を見つけようとしていることを私は理解しているので、一緒に良い解決策を見つけようとしましょう;-)

EDIT1:それも面白いかもしれないことがわかりましたhttp://code.google.com/p/peekviewstate/source/browse/trunk/src/peekviewstate_example.py

(申し訳ありませんが、この投稿は完璧ではありません/良い情報が満載です...私はかなりn00bですが、一生懸命頑張っています)

4

1 に答える 1

1

それに対処する方法は?__VIEWSTATEサーバーから送信された不透明なデータと考えてください。特定のページとそのオブジェクトの状態に関する特定のデータが含まれているため、変更することはお勧めしません。

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

それが引き起こしている正確な問題は何ですか?あなたの解決策はかなり簡単だと思います。

ちなみに、多くの ASP.NET アプリケーションには公開 API が含まれており、ページを解析する代わりに使用できます。

于 2012-04-26T20:14:26.437 に答える