Отправить без использования кнопки "Отправить", "Механизировать"

Итак, я начал с Mechanize, и, по-видимому, первое, что я пробовал, - это высоко ориентированный JavaScript-сайт на уровне обезьян-носорогов.

Теперь то, что я застрял, представляет форму.

Как правило, я бы сделал submit, используя встроенную функцию submit() Mechanize.

import mechanize

browser = mechanize.Browser()
browser.select_form(name = 'foo')
browser.form['bar'] = 'baz'
browser.submit()

Таким образом, он будет использовать кнопку отправки, доступную в HTML-форме.

Тем не менее, сайт, на котором я застрял, должен был быть тем, который не использует кнопки отправки HTML... Нет, они пытаются быть гуру JavaScript и делают передачу через JavaScript.

Обычный файл submit() не работает с этим.

Итак... Есть ли способ обойти это?

Любая помощь приветствуется. Большое спасибо!

- [Edit] -

Функция JavaScript, на которую я застрял:

function foo(bar, baz) {
    var qux = document.forms["qux"];

    qux.bar.value = bar.split("$").join(":");
qux.baz.value = baz;
qux.submit();
}

Что я сделал в Python (и что не работает):

def foo(browser, bar, baz):
    qux = browser.select_form("qux")

    browser.form[bar] = ":".join(bar.split("$"))
    browser.form[baz] = baz
    browser.submit()

Ответ 1

Три способа:

Первый способ предпочтительнее, если форма отправляется с использованием метода POST/GET, в противном случае вам придется использовать второй и третий методы.

  • Отправка формы вручную и проверка запросов POST/GET, их параметров и почтового URL, необходимых для отправки формы. Популярными инструментами для проверки заголовков являются расширение HTTP-заголовков HTTP и расширение Firebug для Firefox и расширение инструментов для разработчиков для Chrome. Пример использования метода POST/GET:

    import mechanize
    import urllib
    
    browser = mechanize.Browser()
    #These are the parameters you've got from checking with the aforementioned tools
    parameters = {'parameter1' : 'your content',
                  'parameter2' : 'a constant value',
                  'parameter3' : 'unique characters you might need to extract from the page'
                 }
    #Encode the parameters
    data = urllib.urlencode(parameters)
    #Submit the form (POST request). You get the post_url and the request type(POST/GET) the same way with the parameters.
    browser.open(post_url,data)
    #Submit the form (GET request)
    browser.open(post_url + '%s' % data)
    
  • Перепишите javascript и выполните его в Python. Проверьте spidermonkey.

  • Эмулировать полный браузер. Проверьте Селен и Мельницу.