Использование Mechanize для отправки формы для веб-автоматизации - возврат ошибки - PullRequest
0 голосов
/ 17 августа 2010
for control in form.controls:

        if control.type == 'text':
            if 'user' in control.name:
                control.value = 'blah'
            if 'mail' in control.name:
                control.value = 'blah'

        if control.type == 'password':
            if 'pass' in control.name:
                control.value = 'blah'

        if control.type == 'checkbox':
            if 'agree' in control.name:
                control.selected = True

        if control.type == 'submit':
            if 'Submit' in control.name:
                control.readonly = False

Я заполняю форму таким образом. Затем я устанавливаю флажок «Принимаю», после чего пытаюсь использовать br.submit () для отправки формы и отправки данных. Ошибка, я получаю это:

AttributeError: Экземпляр SubmitControl не имеет атрибута «click»

Это источник HTML элементов управления для отправки и согласования:

<input type="submit" name="regSubmit" value="Register" />
<label for="regagree"><input type="checkbox" name="regagree" onclick="checkAgree();" id="regagree" class="check" /> <b>I Agree</b></label>

Источник HTML этого сайта имеет следующий JavaScript:

function verifyAgree()
{
    if (document.forms.creator.passwrd1.value != document.forms.creator.passwrd2.value)
    {
        alert("The two passwords you entered are not the same!");
        return false;
    }

    if (!document.forms.creator.regagree.checked)
    {
        alert("Please read and accept the agreement before registering.");
        return false;
    }

    return true;
}
function checkAgree()
{
    document.forms.creator.regSubmit.disabled = isEmptyText(document.forms.creator.user) || isEmptyText(document.forms.creator.email) || isEmptyText(document.forms.creator.passwrd1) || !document.forms.creator.regagree.checked;
    setTimeout("checkAgree();", 1000);
}
setTimeout("checkAgree();", 1000);

Когда я печатаю формы для печати в IDLE, форма возвращается как заполненная, и все надлежащие элементы управления выбираются. Я не могу на всю жизнь понять, ПОЧЕМУ это не работает. Я был на этом в течение двух дней.

Помощь очень ценится.

Ответы [ 2 ]

1 голос
/ 24 августа 2010

Мы обнаружили, что у Mechanize часто возникают проблемы с некоторым Javascript на определенных страницах.Это не удивительно, так как это не настоящий веб-браузер => Вы пробовали его с помощью инструмента, основанного на реальном браузере?(например, WatiN или iMacros для IE / Firefox / Chrome)?

0 голосов
/ 17 августа 2010

Почему бы просто не отправить форму, как показано в образце документации :

br.select_form(name="whatever")
response = br.submit()

Нажатие на кнопку отправки - это только один из способов отправить форму; использование JavaScript это другое. Так что вам не нужно проходить через поиск элемента управления передачей.

...