Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 机械化如何添加到选择列表?_Python_Mechanize - Fatal编程技术网

Python 机械化如何添加到选择列表?

Python 机械化如何添加到选择列表?,python,mechanize,Python,Mechanize,我刚开始尝试通过mechanize提交webforms。有一个项目列表可供选择,MASTER\u MODS。可以在MODS中使用按钮add_MODS或在IT_MODS中使用按钮add_IT_MODS(参见底部的图)。在表单中,它如下所示(底部的表单代码): 我得到mechanize.\u form.ItemNotFoundError:名称为“乙酰基(N-术语)”的项目不足 当我尝试的时候 br.form[ 'add_MODS'] = 'Acetyl (N-term)' 我得到值错误:控件“ad

我刚开始尝试通过mechanize提交webforms。有一个项目列表可供选择,
MASTER\u MODS
。可以在
MODS
中使用按钮
add_MODS
或在
IT_MODS
中使用按钮
add_IT_MODS
(参见底部的图)。在表单中,它如下所示(底部的表单代码):

我得到
mechanize.\u form.ItemNotFoundError:名称为“乙酰基(N-术语)”的项目不足

当我尝试的时候

br.form[ 'add_MODS'] = 'Acetyl (N-term)'
我得到
值错误:控件“add_MODS”被忽略,因此是只读的

如何将项目添加到
MODS
IT\u MODS


图形和代码

代码:


试试这个?评论中的解释

from mechanize import Browser, Item
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')]
url = 'http://www.matrixscience.com'\
      '/cgi/search_form.pl?FORMVER=2&SEARCH=MIS'
br.open(url)
br.select_form('mainSearch')

# get the actual control object instead of its contents
mods = br.find_control('MODS')
# add an item
item = Item(mods, {"contents": "Acetyl (N-term)", "value": "Acetyl (N-term)"})
# select it. if you don't, it doesn't appear in the output
# this is probably why MASTER_MODS appears empty
item.selected = True
print br['MODS']
# outputs: ['Acetyl (N-term)']
假设这是可行的,我是从下面的评论中得到的:

要将项添加到列表容器,请使用其控件实例化项 和属性: 请注意,您负责在此处获得正确的属性, 由于以下原因,它们与原始HTML不完全相同 默认规则和一些特殊属性(例如,表示 选项的.attrs(dict)中有一个特殊的“contents”键。将来 将有一种明确支持的方式使用解析逻辑 在不了解这些详细信息的情况下,从HTML字符串添加项和控件。
mechanize.Item(奶酪,{“内容物”:“马斯卡朋”,“价值”:“马斯卡朋”})


我在你的示例链接上发现了“致命错误”。@kobejohn我有一个尾随],现在已修复。我没有mechanize的经验,但我有一大堆问题。加入我?@NiekdeKlein不确定您是否在聊天中看到了这一点:我认为该列表旨在作为单一选择,因为您使用选择来添加/删除其中的项目,而不是选择要提交的内容。一旦事情在mods列表中,我认为这就足够让它们被提交,你不必担心选择它们。不过,您可能确实需要删除该默认项。
br.form[ 'add_MODS'] = 'Acetyl (N-term)'
from mechanize import Browser, _http
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')]
url = "http://www.matrixscience.com/cgi/search_form.pl?FORMVER=2&SEARCH=MIS"
br.select_form( 'mainSearch' )
br.open(url)
print br.form
from mechanize import Browser, Item
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')]
url = 'http://www.matrixscience.com'\
      '/cgi/search_form.pl?FORMVER=2&SEARCH=MIS'
br.open(url)
br.select_form('mainSearch')

# get the actual control object instead of its contents
mods = br.find_control('MODS')
# add an item
item = Item(mods, {"contents": "Acetyl (N-term)", "value": "Acetyl (N-term)"})
# select it. if you don't, it doesn't appear in the output
# this is probably why MASTER_MODS appears empty
item.selected = True
print br['MODS']
# outputs: ['Acetyl (N-term)']