Как распечатать информацию о радиоуправлении

#python #forms #mechanize

#python #формы #механизировать

Вопрос:

Я использую mechanize модуль для извлечения информации с веб-страницы. В нем есть раздел радиоуправления, который я выбираю перед переходом на следующую страницу. Я мог бы легко выбрать значение, присвоив ему значение. Но не удалось получить значение переключателя-кандидата. RadioSelect часть моей формы выглядит следующим образом:

 <RadioControl(rdoSelect=[1634,ABX EXPRESS, 16650,XYZ EXP])>
  

Я мог бы легко установить значения с помощью:

 br.form['txtSource']='1634,ABX EXPRESS'
  

Что я хочу, так это удалить список :

 [1634,ABX EXPRESS, 16650,XYZ EXP]
  

Обновить:

Когда я дал

 print br.form['rdoSelect']
  

В результате выдается []

Я мог бы получить значение, используя

 print br.form.possible_items("rdoSelect")
  

Но это дает мне это

 /usr/lib/python2.5/site-packages/ClientForm.py:2984: DeprecationWarning: [item.name for item in self.items]
  return c.possible_items(by_label)
  

Ответ №1:

Вместо:

 print br.form.possible_items("rdoSelect")
  

mechanize говорит использовать:

 options = [item.name for item in form.find_control('rdoSelect').items]
  

Пример использования:

 #!/usr/bin/python
import re
import mechanize
br = mechanize.Browser()
r = br.open("http://www.htmlcodetutorial.com/forms/_INPUT_TYPE_RADIO.html")
form = mechanize.ParseResponse(r, backwards_compat=False)[2]
options = [item.name for item in form.find_control('pizzasize').items]
print options
  

Выдает:

 ['S', 'M', 'L']
  

Ответ №2:

Во-первых, предупреждение об устаревании не является ошибкой. Обычно это означает, что библиотека или код, который вы запускаете, были написаны для более ранней версии Python.

Я не уверен, как txtSource относится к rdoSelect (кажется, вы ожидаете, что они будут содержать одно и то же значение?). Однако переключатель обычно имеет символическое значение, а не отображаемый текст. Можете ли вы предоставить образец HTML-кода?