我正在创建一个提交表单的脚本。我面临的问题是,某些选项是隐藏的,并且在填充其他字段之前不会显示选项(在HTML源代码中)。
我得到的错误是ItemNotFoundError:名称为“ xxx”的项目不足。
我尝试按“正确的顺序”更改字段,但是按预期,这不会更改结果。
我的代码如下:
import mechanize
br = mechanize.Browser()
br.set_handle_robots(False) #ignore robots.txt
br.addheaders = [('User-agent', 'Mozilla/5.0 (Windows NT 5.2; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11')]
bot = br.open("www.website.com")
br.select_form(nr=0)
br['type'] = ["xxx",]
br['specific'] = ["yyy",]
如前所述,问题是“类型”和“特定”具有一对多关系,并且两者都是下拉选择字段。选择“类型”时,将出现“特定”的不同选项。
当您首次查看网站的页面源时,“特定”的唯一选项是-1。如果确实为“类型”选择了某些内容,则“特定”将出现多个选项,但是机械化看不到这些选项。相反,我可以在页面源代码中查看它们。
当我通过br.submit()提交表单时,出现ItemsNotFoundError,因为它看不到这些值。有办法克服这个问题吗?
我已经尝试解决了好几个小时,所以如果有人可以帮助我,我将不胜感激。
答案 0 :(得分:0)
我找到了解决问题的方法。希望这可以帮助面临类似问题的其他人。我要做的就是添加:
item = mechanize.Item(br.form.find_control(name='nameOfFormControl'),
{'contents': '221', 'value': '221', 'label': 221})
基本上,我在表单控制组中添加了新选项(我知道这是有效的)。