Отправить без использования кнопки отправки, Механизировать
Итак, я начал с 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, в противном случае вам придется прибегнуть ко второму и третьему методу.
Отправка формы вручную и проверка 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)
Перепишите javascript и выполните его на Python. Проверьте спайдермонки.
Эмулируйте полноценный браузер. Проверьте Селен и Ветряная мельница.