我无法使用Python库Mechanize修改复选框的值。问题是表单不会执行所需的操作,因为该值是由JavaScript修改的,而Mechanize不支持。
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()
返回的错误是:“mechanize._form.ItemNotFoundError:名称为'stringGoesHere'的项目不足”。我也尝试使用下面的代码行替换find_control()方法,并显示相同的错误消息:
br['pkid'] = [stringGoesHere]
如果输入被忽略,我已经能够创建一个名为“pkid”的新表单字段,其中包含所需的值,但尚未测试此解决方案。对我来说似乎有点倒退,必须创建一个具有相同名称的附加输入才能获得所需的效果:
br.form.new_control('text','pkid',{'value':'stringGoesHere'})
br.form.fixup()
我希望有人可以指出我正确的方向。 Python Mechanize的文档有点缺乏,谷歌搜索也没有真正帮助。
我想提交的表单的精简版本如下:
<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>