2014-09-02 4 views
0

Я использую механизацию для заполнения формы с веб-сайта, но теперь это изменилось, и некоторые из необходимых полей выглядят скрытыми и не могут быть доступны с помощью механизации больше - при печати всех доступных форм. Я предполагаю, что он был изменен для использования более современных методов (application/x-www-form-urlencoded), но я не нашел способ обновить свой скрипт, чтобы продолжить использование этой формы программно.Получение необходимых ключей для приложения/x-www-form-urlencoded

Из того, что я прочитал, я могу отправить диктовку (пару ключ/значение) в кнопку отправки напрямую, а не заполнять форму в первую очередь - пожалуйста, исправьте меня, если я ошибаюсь. НО Я не смог найти способ получить ключи, которые необходимы ...

Я бы очень оценил это, если бы кто-то мог указать мне в правильном направлении или поставить меня прямо на случай, если это невозможно.

ответ

2

Вы не можете при любых обстоятельствах извлекать все поля, которые ожидает сервер.

Почтовый адрес, код обработки POST, является черным ящиком. Вы не можете заглянуть внутрь кода, который запускается сервером. Самая лучшая информация, которую вы знаете о том, что она ожидает, - это то, что первоначальная форма сообщает вашему браузеру о публикации. Эта оригинальная форма состоит не только из HTML, но также из заголовков, которые были отправлены с ним (например, файлы cookie) и любого кода JavaScript, который выполняется браузером.

Во многих случаях достаточно разобрать HTML-код, отправленный для формы; это то, что делает Механизм (или недавняя более современная структура, например, robobrowser), а также небольшая обработка файлов cookie и включение типичных заголовков, таких как реферер. Но если какой-либо код JavaScript обрабатывает HTML или перехватывает отправку формы для добавления или удаления данных, тогда Механизм или другие парсители формы Python не могут реплицировать этот шаг.

Ваших вариантов затем являются:

  • перепроектирует, что код Javascript делает и тиражировать, что в коде Python. Средства разработки вашего браузера могут помочь здесь; обратите внимание на то, что размещается на вкладке сети, например, или используйте отладчик для выполнения кода JavaScript, чтобы узнать, что он делает.

  • Использование фактического браузера, управляемого Python. Селен мог сделать это за вас; он может управлять настольным браузером (Chrome, Firefox и т. д.), или его можно использовать для управления безгласной версией браузера, например, PhantomJS. Это тяжелее ресурсов, но на самом деле будет запускать код JavaScript и позволить вам публиковать форму так же, как и ваш браузер, по-любому.

+0

Ничего себе, большое спасибо. Это уже очень полезно. Я должен попробовать, потому что я считаю, что это java, который изменяет html. К сожалению, я не думаю, что это будет возможно для того, что я хочу сделать, потому что мне нужно будет заполнить форму 100000 раз, которая будет очень медленной при моделировании браузера, но она должна дать мне хорошую отправную точку. Надеюсь, я смогу получить требуемые ключи. Я еще не принял ответ, потому что позже я, возможно, буду иметь более подробные вопросы. Спасибо – T1M

+0

@ T1M: этот формат на самом деле не подходит для подробных последующих вопросов. Надеюсь, я дал вам кое-что подумать. –

+0

One follow up Q .: Что бы вы сказали, это самый надежный способ сделать это, самый надежный быстрее всего? На самом деле имитировать то, что делает браузер (PhantomJS), или попытаться перепроектировать код Java? – T1M

Смежные вопросы