0

我正在尝试以这样的形式填写 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;到 incase 的开头,这是问题,但我在替换g时遇到了同样的错误。谢谢。'&amp;nbsp;g''g'

4

1 回答 1

0

试试“&g”......

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

我认为没有一种简单的方法可以准确地确定在您的 python 代码中使用的正确值是什么。您通常不会看到这样的值。我只是使用 mechanize 打印出它认为的值是什么:

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 不存在于字符串版本中。

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

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

有一个 html 实体&nbsp;(“不间断空格”),它在 html 中创建一个空格。一般来说,html会折叠所有的空白,所以&nbsp;用来创建不会折叠的空格。但是要注意,在options的value属性中,写的是'nbsp;',它不是html实体,因为它不是以'&'开头的,所以它只是一串字符,属于价值。所以每个选项的价值是以下的组合:

&  (represented by an html entity as required)

和字符:

nbsp;g

这些真是奇怪的价值观。

于 2013-07-02T07:59:32.173 回答