2

我无法使用 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>
4

0 回答 0