Теперь я понимаю, что означает ошибка, но мне любопытно, почему это не работает и если есть альтернатива, которая выполнит ту же задачу.Я передаю регулярные выражения при использовании Beautiful Soup и разочарован тем, что Mechanize не поддерживает (?) Ту же функциональность.input_names является диктом.
TypeError: control label must be string-like
# first - as a default - set form inputs by their labels
for k in variables:
for word in input_names[k]:
for control in br.form.find_control(label=re.compile(word)):
br.form.set_value(variables[k], name=control.name)
Цель состоит в том, чтобы сопоставить любой ввод формы, чья метка содержит фразу, а не полностью совпадает.
Кроме того, любые советы по эффективности или красивому / элегантному кодуоценены;Я новичок в Python.
Обходной путь: (не проверено)
for tag in soup.findAll("label"):
for k in variables:
# try to find label in <label>X</label>. It will not be in for="X"
# because if it was, we'd find it below anyway.
for word in input_names[k]:
if word in tag.contents.lower():
try:
br.form.find_control(name=tag['for'], kind="text").value = variables[k]
except:
print "failed to set value of input found by label."