Python 机械化如何添加到选择列表?
我刚开始尝试通过mechanize提交webforms。有一个项目列表可供选择,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
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)']