2009-05-28 4 views
4
import mechanize 

url = 'http://steamcommunity.com' 

br=mechanize.Browser(factory=mechanize.RobustFactory()) 

br.open(url) 
print br.request 
print br.form 
for each in br.forms(): 
    print each 
    print 

上記のコードの結果に:このページのフォームでmechanizeを失敗させる方法はありますか?

Traceback (most recent call last): 
    File "./mech_test.py", line 12, in <module> 
    for each in br.forms(): 
    File "build/bdist.linux-i686/egg/mechanize/_mechanize.py", line 426, in forms 
    File "build/bdist.linux-i686/egg/mechanize/_html.py", line 559, in forms 
    File "build/bdist.linux-i686/egg/mechanize/_html.py", line 228, in forms 
mechanize._html.ParseError 

私の具体的な目標は、ログインフォームを使用することですが、私も任意のフォームがあることを認識して機械化を取得することはできません。 のフォームbr.select_form(nr=0)を選択する最も基本的な方法であると私が思うものを使用しても、同じトレースバックになります。フォームのenctypeはmultipart/form-dataで、違いがあれば可能です。

私はこの2つの質問にすべてが従っていると思います:どのようにしてこのページで作業する機械化ができますか?それが不可能な場合、クッキーを維持しながら別の方法がありますか?

編集:下記のとおり、これは 'https://steamcommunity.com'にリダイレクトされます。

Mechanizeのは成功し、次のコードを見ることができるようにHTMLを取得することができます:あなたは、ウェブサイトがHTTPS(SSL)サーバーにリダイレクトされていることを

url = 'https://steamcommunity.com' 

hh = mechanize.HTTPSHandler() # you might want HTTPSHandler, too 
hh.set_http_debuglevel(1) 
opener = mechanize.build_opener(hh) 
response = opener.open(url) 
contents = response.readlines() 

print contents 

答えて

2

言及しましたか?

さて、このような新しいHTTPSハンドラを設定してみてください:

mechanize.HTTPSHandler() 
+0

私はそれを追加することを忘れませんでした情報、ありがとう。残念ながら、言及した行を追加しても何も変わりません。 –

2

使用して、この秘密を、私はこれはあなたのための仕事であると確信している;)

br = mechanize.Browser(factory=mechanize.DefaultFactory(i_want_broken_xhtml_support=True)) 
+0

私にとってはうまくいきませんが、 'mechanize._form.ParseError:Nested FORMs'を得ています。私は 'mechanicalize 0.2.5'とDebian' python-mechanize 0.1.11' – koniu

+0

のようにしようとしましたが、最初にこのような要素を調べなければならないのですか? ** in a br.forms():print a **これは最初にフォーム要素を調べるのに役立ちます –

関連する問題