如何使用Python Mechanize更改HTML复选框输入的值?

2024-05-16 12:21:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我在使用Python库Mechanize修改复选框的值时遇到问题。问题是,表单将无法执行所需的操作,因为JavaScript修改了值,而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()

返回的错误是:“mechanize_form.ItemNotFoundError:名为“stringgoesher”的项目不足。我还尝试用下面的代码行替换find_control()方法,并返回相同的错误消息:

^{pr2}$

如果忽略输入,我就可以用所需的值创建一个名为“pkid”的新表单字段,但尚未测试此解决方案。对于我来说,似乎也有点倒退,必须创建具有相同名称的附加输入才能获得所需的效果:

br.form.new_control('text','pkid',{'value':'stringGoesHere'})
br.form.fixup()

我希望有人能为我指出正确的方向。pythonmechanize的文档有点缺乏,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>

Tags: namebrformidvalue错误finddocument