Python ライブラリ Mechanize を使用してチェック ボックスの値を変更できません。問題は、Mechanize がサポートしていない JavaScript によって値が変更されるため、フォームが目的のアクションを実行しないことです。
find_control() メソッドはエラーを返します。以下は、問題のあるコードのスニペットです。
from mechanize import Browser
stringGoesHere = "stringGoesHere"
br = Browser()
br.set_handle_robots(False)
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("http://example.com/form.php")
br.select_form(nr=0)
br.find_control(name="pkid").value = ["stringGoesHere"]
br.submit()
返されるエラーは次のとおりです。また、find_control() メソッドを以下のコード行に置き換えてみましたが、同じ結果のエラー メッセージが表示されます。
br['pkid'] = [stringGoesHere]
入力が無視された場合、必要な値で「pkid」という名前の新しいフォーム フィールドを作成できましたが、この解決策はテストしていません。また、目的の効果を得るには、同じ名前の追加の入力を作成する必要があることも、少し逆に思えます。
br.form.new_control('text','pkid',{'value':'stringGoesHere'})
br.form.fixup()
誰かがこれについて正しい方向に向けてくれることを望んでいました。Python Mechanize のドキュメントは少し不足しており、Google 検索もあまり役に立ちませんでした。
私が提出しようとしているフォームの簡素化されたバージョンは以下のとおりです。
<form name="formName" method="post" action="http://example.com">
<input type="checkbox" id="0" onclick="uncheckMasterCheckbox(); enableExtension('0', 'telephonenumber_0')" class="content-nogroove" name="pkid" value='wglkweg-ewrg-44e4-b2c1-wegwergb5:'/>
<input type="text" id="telephonenumber_0" name="telephonenumber" value="" disabled size="10" onchange="var e = document.getElementById('0'); e.value = 'wglkweg-ewrg-44e4-b2c1-wegwergb5:' + document.getElementById('telephonenumber_0').value;" onblur="var e = document.getElementById('0'); e.value = 'wglkweg-ewrg-44e4-b2c1-wegwergb5:' + document.getElementById('telephonenumber_0').value;" onkeyup="numbersOnlyIncludeZero('telephonenumber_0')"/>
<button class="content-formbutton" id="importUsersButton" onclick="save();return false;">Import Selected</button>
</form>