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

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

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

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

import mechanize

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

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

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

Обычная submit(), похоже, не работает с этим.

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

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

--[Редактировать]--

Функция 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, в противном случае вам придется прибегнуть ко второму и третьему методу.

  1. Отправка формы вручную и проверка POST/GET-запросов, их параметров и URL-адреса, необходимого для отправки формы. Популярными инструментами для проверки заголовков являются расширение Live HTTP заголовки и расширение Firebug для Firefox, а также расширение Developer Tools для 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)
    
  2. Перепишите javascript и выполните его на Python. Проверьте спайдермонки.

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

Другие вопросы по тегам