Автоматическое нажатие кнопки «Отправить» с использованием Python

StackOverflow https://stackoverflow.com/questions/1082361

Вопрос

У автобусной компании, которой я пользуюсь, ужасный сайт (иврит,Английский), что делает простой запрос «Расписание от А до Б на сегодня» кошмаром.Я подозреваю, что они пытаются поощрить использование дорогостоящей системы SMS-запросов.

Я пытаюсь собрать все расписание с сайта, отправляя запрос для каждой возможной точки в каждую возможную точку, что в сумме составит около 10 тысяч запросов.Результат запроса появится во всплывающем окне.Я новичок в веб-программировании, но знаком с основными аспектами Python.

  1. Какой самый элегантный способ проанализировать страницу, выбрать значение в раскрывающемся меню и нажать «отправить» с помощью скрипта?
  2. Как передать программе содержимое нового всплывающего окна в качестве входных данных?

Спасибо!

Это было полезно?

Решение

Саржа это простой язык сценариев для просмотра веб-страниц.Это случается со спортом API Python.

Саржа, по сути, представляет собой тонкую оболочку вокруг пакета механизации.Все команды twill реализованы в файле groups.py, а pyparsing выполняет анализ входных данных и их преобразование в команды Python (см. parse.py).Интерактивная работа оболочки и поддержка readline реализованы через модуль cmd (из стандартной библиотеки Python).

Пример «нажатия» отправки из приведенного выше документа:

from twill.commands import go, showforms, formclear, fv, submit

go('http://issola.caltech.edu/~t/qwsgi/qwsgi-demo.cgi/')
go('./widgets')
showforms()

formclear('1')
fv("1", "name", "test")
fv("1", "password", "testpass")
fv("1", "confirm", "yes")
showforms()

submit('0')

Другие советы

Я бы предложил вам использовать механизировать.Вот фрагмент кода с их страницы, который показывает, как отправить форму:


import re
from mechanize import Browser

br = Browser()
br.open("http://www.example.com/")
# follow second link with element text matching regular expression
response1 = br.follow_link(text_regex=r"cheese\s*shop", nr=1)
assert br.viewing_html()
print br.title()
print response1.geturl()
print response1.info()  # headers
print response1.read()  # body
response1.close()  # (shown for clarity; in fact Browser does this for you)

br.select_form(name="order")
# Browser passes through unknown attributes (including methods)
# to the selected HTMLForm (from ClientForm).
br["cheeses"] = ["mozzarella", "caerphilly"]  # (the method here is __setitem__)
response2 = br.submit()  # submit current form

# print currently selected form (don't call .submit() on this, use br.submit())
print br.form

Вы очень редко захотите на самом деле «нажать кнопку отправки», вместо того, чтобы напрямую отправлять запросы GET или POST к ресурсу-обработчику.Посмотрите на HTML, в котором находится форма, и посмотрите, какие параметры она передает на какой URL-адрес, и является ли это методом GET или POST.Вы можете достаточно легко сформировать эти запросы с помощью urllib(2).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top