用机械化填写选择字段形式

时间:2013-07-02 07:41:56

标签: python forms python-2.7 mechanize mechanize-python

我正在尝试以这样的形式填写3个选择字段。

br.select_form(name='frmentermemorableinformation1') br['frmentermemorableinformation1:strEnterMemorableInformation_memInfo1'] = ['g']

运行程序时出现以下错误。

ItemNotFoundError: insufficient items with name 'g'

这是相关表格的开头,也是3个选择输入中的第一个。

<form id="frmentermemorableinformation1" name="frmentermemorableinformation1" method="post" action="/personal/a/logon/entermemorableinformation.jsp" class="validationName:(frmentermemorableinformation1) validate:()" autocomplete="off" enctype="application/x-www-form-urlencoded"> <fieldset class="memInfoSelect clearfix"><div class="formField validate:(oneSelectFieldRequired) validationName:(memorableInformation) clearfix"><div class="formFieldInner"><div class="clearfix"><label for="frmentermemorableinformation1:strEnterMemorableInformation_memInfo1">Character 5 &#160;</label><select id="frmentermemorableinformation1:strEnterMemorableInformation_memInfo1" name="frmentermemorableinformation1:strEnterMemorableInformation_memInfo1"><option value="-">Select</option><option value="&amp;nbsp;a">&nbsp;a</option><option value="&amp;nbsp;b">&nbsp;b</option><option value="&amp;nbsp;c">&nbsp;c</option><option value="&amp;nbsp;d">&nbsp;d</option><option value="&amp;nbsp;e">&nbsp;e</option><option value="&amp;nbsp;f">&nbsp;f</option><option value="&amp;nbsp;g">&nbsp;g</option><option value="&amp;nbsp;h">&nbsp;h</option><option value="&amp;nbsp;i">&nbsp;i</option><option value="&amp;nbsp;j">&nbsp;j</option><option value="&amp;nbsp;k">&nbsp;k</option><option value="&amp;nbsp;l">&nbsp;l</option><option value="&amp;nbsp;m">&nbsp;m</option><option value="&amp;nbsp;n">&nbsp;n</option><option value="&amp;nbsp;o">&nbsp;o</option><option value="&amp;nbsp;p">&nbsp;p</option><option value="&amp;nbsp;q">&nbsp;q</option><option value="&amp;nbsp;r">&nbsp;r</option><option value="&amp;nbsp;s">&nbsp;s</option><option value="&amp;nbsp;t">&nbsp;t</option><option value="&amp;nbsp;u">&nbsp;u</option><option value="&amp;nbsp;v">&nbsp;v</option><option value="&amp;nbsp;w">&nbsp;w</option><option value="&amp;nbsp;x">&nbsp;x</option><option value="&amp;nbsp;y">&nbsp;y</option><option value="&amp;nbsp;z">&nbsp;z</option><option value="&amp;nbsp;0">&nbsp;0</option><option value="&amp;nbsp;1">&nbsp;1</option><option value="&amp;nbsp;2">&nbsp;2</option><option value="&amp;nbsp;3">&nbsp;3</option><option value="&amp;nbsp;4">&nbsp;4</option><option value="&amp;nbsp;5">&nbsp;5</option><option value="&amp;nbsp;6">&nbsp;6</option><option value="&amp;nbsp;7">&nbsp;7</option><option value="&amp;nbsp;8">&nbsp;8</option><option value="&amp;nbsp;9">&nbsp;9</option></select></div>

我到底做错了什么,我尝试将&amp;nbsp;添加到问题的g开头,但我只是在'&amp;nbsp;g'替换'g'时遇到同样的错误}。感谢。

1 个答案:

答案 0 :(得分:0)

尝试'&amp; G” ..................

这对我有用:'&nbsp;g'(在列表中)

我认为没有一种简单的方法可以确切地知道在python代码中使用的正确值。你通常不会看到这样的价值观。我只是使用机械化打印出它认为的值是什么:

import mechanize 

br = mechanize.Browser()
br.open("http://localhost:8080/1.htm")
br.select_form(name='frmentermemorableinformation1') 

select = br.form.find_control("frmentermemorableinformation1:strEnterMemorableInformation_memInfo1", 
                     type='select')

for item in select.items:
    print item.attrs['value']

--output:--
-
&nbsp;a
&nbsp;b
&nbsp;c
&nbsp;d
&nbsp;e
&nbsp;f
&nbsp;g
...
...
  

我想我应该查看一些HTML来理解它为什么要我这样做   输入字符串而不是值和什么&amp; nbsp;和   为什么放大器不存在于字符串版本中。

某些字符在html中是非法的。例如,其中一个是'&lt;'因为它看起来像标签的开头。但是如果你想显示'x&lt;你的HTML页面上的3'? Html提供了一种语法,允许您使用所谓的“html实体”在html中包含非法字符。包含'&lt;'您的页面上的字符,您使用html实体&lt;(“小于”)。 Html实体以'&amp;'开头,后跟一些数字或一些代表非法字符的字符,并以分号结尾。

因为html实体以'&amp;'开头,这意味着你不能写'&amp;'在您的HTML中,当您想要显示'&amp;'时你网页上的字符 - 因为html会认为'&amp;'是一个html实体的开始。所以你必须使用html实体'&amp;',恰好是&amp;(“&符”)。

有一个html实体&nbsp;(“非破坏空间”),它在html中创建一个空格。通常,html会折叠所有空格,因此&nbsp;用于创建不会折叠的空格。但是请注意,在选项的值属性中,它是'nbsp;',它不是html实体,因为它不以'&amp;'开头,所以它只是一系列字符的一部分价值。所以每个选项的值都是:

的组合
&  (represented by an html entity as required)

和字符:

nbsp;g

这些都是非常奇怪的价值观。