Ruby Mechanize не возвращает правильно построенную страницу Javascript - PullRequest
0 голосов
/ 03 января 2011

Я пытаюсь создать сценарий для заполнения многостраничной «формы», которую я должен заполнять еженедельно (на самом деле, форма безработицы), на 4-й странице появляются флажок и 2 кнопки радио, все они созданы.по Javascript.Когда я перехожу на эту страницу с помощью Mechanize, я получаю html без этих 3 элементов управления, поэтому я не могу идти дальше в этом процессе.

Это обычная проблема?
Я заполняю формузатем просто звоните page = agent.submit(form, form.buttons.first) и он возвращается без встроенных элементов управления.

Ответы [ 4 ]

2 голосов
/ 03 января 2011

Mechanize - это анализатор HTML, а не интерпретатор JavaScript. Если его нет в HTML, он ничего не может сделать. Вам нужен «правильный» браузер. (Под «правильным» я имею в виду тот, который может по крайней мере анализировать HTML, запускать JavaScript и в идеале также интерпретировать CSS.)

Существуют такие инструменты, как Selenium & Co., которые позволяют вам «дистанционно управлять» «настоящим» браузером (Firefox, Internet Explorer, & hellip;), и предпринимаются усилия для создания полностью сценариевых браузеров без графического интерфейса пользователя именно для этого варианта использования. .

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

1 голос
/ 03 января 2011

Являются ли значения сгенерированной формы предсказуемыми?Мне часто бывает удобно обходить всех отдельных помощников по форме и просто публиковать их в форме:

browser = Mechanize.new
browser.post(some_url, { field1 => val1, field2 => val2, ... })
0 голосов
/ 04 января 2011

Как уже упоминалось в других ответах, вам нужно использовать что-то, что управляет реальным веб-браузером, поскольку в настоящее время нет библиотек, способных анализировать этот уровень javascript (некоторые могут следовать за перенаправлениями javascript, но это довольно много) Это было бы идеально и легче поддерживать.

Если вы действительно хотите придерживаться подхода механизации, тогда вы просто сможете добавить поле сообщения вручную.

Если они используют капчу для обхода автоматической публикации, вам может понадобиться простой сервис декапчи (10 долларов на 2000 кредитов должно быть достаточно).

Наконец, может быть разумно просто не проходить через все эти неприятности.

0 голосов
/ 03 января 2011

Возможно, вы захотите использовать Watir , если вы работаете в Windows, или используете Firewater в Mac / Linux или safariwatir только в Mac. Все они в основном один и тот же код и находятся на одном сайте.

Он больше ориентирован на тестирование веб-сайтов, но вы можете получить доступ к содержимому страницы, используя xpath, и оттуда продолжить. Надеюсь, браузер обработает для вас javascript и вернет его. Я видел, как некоторые браузеры отображают HTML-код, отображаемый в JS, в своем исходном представлении, а другие нет, поэтому я не уверен, какие результаты вы получите.

...