【问题标题】:Filling in select field form with mechanize使用机械化填写选择字段表格
【发布时间】:2013-07-02 07:41:56
【问题描述】:

我正在尝试以这样的形式填写 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;amp;nbsp; 添加到g 的开头以防这是问题,但我只是得到与'&amp;amp;nbsp;g' 替换'g' 相同的错误。谢谢。

【问题讨论】:

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


    【解决方案1】:

    试试 '&g'........

    这对我有用:'&amp;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 中有些字符是非法的。例如,其中之一是'&lt;(“小于”)。 Html实体以'&'开头,后跟一些数字或一些代表非法字符的字符,并以分号结束。

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

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

    &  (represented by an html entity as required)
    

    和人物:

    nbsp;g
    

    这些都是很奇怪的值。

    【讨论】:

    • ItemNotFoundError: 名称为 '& g' 的项目不足
    • 在没有空格的情况下尝试过,得到了同样的错误,也尝试在没有方括号的情况下,以防你的意思是 TypeError: ListControl, must set a sequence 并不意味着将其作为 2 个单独的 cmets 发送。
    • ['&amp;nbsp;g'] 工作,输入正确的信息并进入下一页。我想我应该查找一些 html 以了解它为什么要我输入字符串而不是值以及 &amp;amp;nbsp; 做了什么以及为什么字符串版本中不存在 amp。
    • @Diofsi,我找到了解决方案。
    • 啊,我看到你自己找到了答案。你真好。
    猜你喜欢
    • 1970-01-01
    • 2017-11-17
    • 1970-01-01
    • 2013-01-12
    • 2013-01-21
    • 2012-05-16
    • 1970-01-01
    • 2015-05-07
    • 1970-01-01
    相关资源
    最近更新 更多