2009-05-07 11 views
2

背景:名前のないPythonフォームの提出

urllibとurllib2をPythonで使用すると、フォームの提出を行うことができます。

まず、辞書を作成します。

formdictionary = { 'search' : 'stackoverflow' } 

urllibのurlencodeメソッドを使用して、この辞書を変換します。

params = urllib.urlencode(formdictionary) 

あなたは今urllib2のでURLリクエストを作成し、最初のパラメータがURLであることで、二次パラメータとして変数のparamsを渡すことができます。

私の理解から、urlencodeは自動的に辞書をhtmlでエンコードし、入力タグを追加します。名前属性であるためにはキーが必要です。これは、name属性の値になるように辞書内の値をとります。 Urllib2はこのHTMLコードをHTTP POSTリクエストで送信します。

問題:あなたが提出されているHTMLコードはname属性を持つHTMLタグ入力と標準的な方法でフォーマットされている場合

これは大丈夫です。

<input id="32324" type="text" name="search" > 

しかし、htmlコードが正しくフォーマットされていないという状況があります。また、HTML入力タグには、name属性のないid属性しかありません。 id属性を使用して入力タグにアクセスする別の方法がありますか?それとも別の方法があるのでしょうか?

解決策:

答えて

2

the W3 standardによれば、入力フィールドを送信するには、name属性が必要です。 Firefox 3とSafari 3.2の簡単なテストでは、name属性がなくてもid属性を持つ入力フィールドが送信されないことがわかりました。

これは、送信したいフォームがあり、フィールドの中にはid属性を持たないものの名前属性を持たないものの、代わりにid属性を使用しているようです。他のブラウザでid属性が使用されている可能性もありますし、ブラウザに送信させる代わりに送信イベントを処理するJavaScriptコードがある可能性もあります。

+0

私はアイマンが何かに乗っているかもしれないと思います。入力フォームは、誤った方向である可能性があります。 Javascriptはsubmissionイベントonclickを処理します。私はどのようにそのイベントをPythonで作るのか分かりません。このトピックについてもう少し詳しく調べようと思います。 –

+0

@Ayman:テストしてくれてありがとう - 私は間違っていました。私は誤解を招くような答えを削除しました。 – RichieHindle

+3

JavaScriptコードをエミュレートする簡単な方法の1つは、HTTPヘッダーを調べてブラウザから送信された内容を確認し、urllibを使用して同じクエリを送信することです。この点で、Firefox用のLive HTTPヘッダー拡張が役立ちます。 https://addons.mozilla.org/en-US/firefox/addon/3829 –

0

名前のない入力タグは、フォームパラメータとして送信されません。例えば

、ちょうどこれを含むHTMLページを作成します。

<form> 
    <input type="text" name="one" value="foo"/> 
    <input type="text" value="bar"/> 
    <input type="submit"/> 
</form> 

あなたは2番目のテキストフィールドがname属性が欠落していることがわかります。あなたがクリックした場合、「送信」ページには、クエリ文字列で更新されます。このため

test.html?one=foo 

良い戦略は、ブラウザによって送信されたライブPOSTリクエストを見て、それをエミュレートすることによって開始することです。 FirefoxのFireBug拡張機能のようなツールを使用して、ブラウザから送信されたPOST要求とパラメータを確認してください。おそらくそれらが隠されたフォーム要素であったか、またはJavaScriptによって作成/設定されていた可能性があるため、以前は気付かなかったパラメータがあります。

+0

私はFirebugのネットセクションを見て、それを有効にしました。 HTTP POSTリクエスト自体と送信されたすべてのパラメータが表示されるようになりました。提案していただきありがとうございます。私が何かを見つけたら、ここにフォローアップを投稿します。 –

関連する問題