Механизировать заполнение текстовой области в теге <noscript> - PullRequest
1 голос
/ 19 сентября 2011

Итак, у меня есть следующий HTML-код:

<form action="blabla" blabla >
<input 1 type=blah>
<input 2 type=blah2> etc
<noscript>
    <textarea name="prda" rows="3" cols="40"></textarea>
</noscript>

Я хочу заполнить эту текстовую область предпочтительно механизом (в Python), однако форма ["prda"] всегда дает мне контроль не найденошибка.Другой пользователь в StackOverflow предположил, что Mechanize не может анализировать элементы управления, которые находятся внутри тега, что мне кажется странным.

В любом случае, мой вопрос заключается в том, может ли механизировать анализ элемента управления внутри тега, и если да, то как?Кроме того, если кто-то может дать мне альтернативу написания текстовой области, я буду более чем счастлив услышать это.Спасибо!

Ответы [ 2 ]

1 голос
/ 03 февраля 2013

Механизация не может распознать этот конкретный элемент управления, поэтому вам нужно добавить новый параметр в форму.

br.form.new_control('text','prda',{'value':''})
br.form.fixup()
br.form['prda'] = 'input'

Я знаю, что, вероятно, вы больше не заинтересованы, но я сошел с ума, чтобы решить эту же проблему.

0 голосов
/ 19 сентября 2011

Я немного изменил ваш HTMl (закрыв тег «form» и добавив некоторый контент в текстовое поле для тестирования):

<form action="blabla" blabla > <input 1 type=blah> <input 2 type=blah2> <noscript> <textarea name="prda" rows="3" cols="40">Foobar</textarea> </noscript> </form>

Хорошо, вот механизированная версия:

from mechanize import ParseResponse, urlopen

response = urlopen("http://localhost:8000/test")
forms = ParseResponse(response, backwards_compat=False)
form = forms[0]
print form["prda"]

Это печатает "Foobar", поэтому я думаю, что я успешно выбрал текстовое поле.

Немеханизированная версия: С здесь :

from lxml.html import fromstring, tostring
form_page = fromstring(html_code)
form = form_page.forms[0]
form.fields = dict(
    prda='input',
    )
print tostring(form)
...