Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Эмуляция браузера средствами Ruby, Эмуляция браузера средствами Ruby 
:(
    Опции темы
moonshiner
Дата 12.10.2010, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 13.4.2010

Репутация: нет
Всего: нет



Добрый день, 

В ruby новичок, но сразу же возникла задача написать скрипт, который логинился бы на определенный хост, выбирал в паре-тройке drag&drop'ов нужные поля и нажимал кнопку Apply. После чего переходил по другой ссылке на том же хосте и стягивал файл. Сколько искал примеров реализации подобной задачи ничего не нашел кроме разве что одного и того же материала касательно HTTP POST & GET. Это благо и на ruby-doc.org имеется... Может быть кто-то сталкивался с подобного рода задачей и может показать как это реализуется. 

Заранее большое спасибо.
PM MAIL   Вверх
source777
Дата 13.10.2010, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 6
Всего: 56



Цитата(moonshiner @  12.10.2010,  19:56 Найти цитируемый пост)
ничего не нашел кроме разве что одного и того же материала касательно HTTP POST & GET.

И что тебе ещё нужно? Любые сайты на данный момент работают только с помощью этих двух методов.
Кроме того, библиотек для программного осуществления HTTP-запросов предостаточно, выбирай на вкус.


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
moonshiner
Дата 13.10.2010, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 13.4.2010

Репутация: нет
Всего: нет



Спасибо за ссылки, буду изучать smile 
PM MAIL   Вверх
solenko
Дата 13.10.2010, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: 1
Всего: 67



Цитата(moonshiner @  12.10.2010,  18:56 Найти цитируемый пост)
выбирал в паре-тройке drag&drop'ов нужные поля и нажимал кнопку Apply

selenium rc и другие тестовые фреймверки


--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
moonshiner
Дата 14.10.2010, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 13.4.2010

Репутация: нет
Всего: нет



Доброго времени суток, 

Подскажите пожалуйста что я делаю не так.. "код" если его можно так назвать, написал используя Guide с оф сайта Mechanize. Судя по логам приложения, скрипт только по ссылкам ходит, но выборку из drop down полей не делает :-( может есть у кого идеи? Заранее спасибо

Код

require 'rubygems'
require 'mechanize'
require 'rio'
  
agent = Mechanize.new 
agent.user_agent_alias = 'Mac Safari'

url = 'http://127.0.0.1/projects/test'
page = agent.get url

page = agent.click(page.link_with(:text => 'Issues'))

def select 
  selectlist.add_filter_select = selectlist.options.priority_id.value
  selectlist.operators_priority_id = selectlist.options.first.value
  selectlist.values_priority_id = selectlist.options.low.value
end 

page = agent.click(page.link_with(:href => /filter/))

rio('http://127.0.0.1/projects/test/issues.pdf') > rio('/home/moonshiner/issues.pdf')

# pp page


PM MAIL   Вверх
source777
Дата 15.10.2010, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 6
Всего: 56



Цитата(moonshiner @  14.10.2010,  19:34 Найти цитируемый пост)
но выборку из drop down полей не делает

А что должен? Это твоя работа - указать какие HTTP запросы отсылать серверу, а не полагаться на искусственный интеллект Mechanize, которого у него и не было никогда.


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
moonshiner
Дата 16.10.2010, 00:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 13.4.2010

Репутация: нет
Всего: нет



А разве нет? При нажатии на последнюю сслыку (c href /filter/) в браузере в логи пишется что мол пришел POST запрос. При выполнении скрипта такого не происходит, хотя жмакается та же самая ссылка. Я просто не пойму что я делаю не так... 
PM MAIL   Вверх
solenko
Дата 16.10.2010, 07:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: 1
Всего: 67



Цитата(moonshiner @  15.10.2010,  23:43 Найти цитируемый пост)
При выполнении скрипта такого не происходит, хотя жмакается та же самая ссылка.

Если при гажатии ссылки отправляется POST запрос, значит отрабатывает JS, который мечанайз выполнять не умеет.


--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
source777
Дата 16.10.2010, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 6
Всего: 56



Цитата(moonshiner @  16.10.2010,  00:43 Найти цитируемый пост)
Я просто не пойму что я делаю не так...  

Ты пытаешься эмулировать действия пользователя, вместо того чтобы автоматизировать последствия этих действий. Юзер может 2 часа заполнять формы, таскать всякие js-контролы из стороны в сторону, а результатом его действий станет один единственный HTTP-запрос. А ты вместо того, чтобы просто автоматизировать нужные HTTP-запросы, пытаешься непонятно с какой целью эмулировать действия пользователя. Иногда действия пользователя эмулируют с целью интеграционного тестирования, но для решения поставленной в топике задачи - это затея совершенно неподходящая и несоразмерно сложная.
Складывается ощущение, что ты видишь сайт только с точки зрения пользователя, что крайне вредно в данном случае. Так что изучи хотя бы основы HTTP, прежде чем приступать к задачам автоматизации.

Цитата(solenko @  16.10.2010,  07:57 Найти цитируемый пост)
Если при гажатии ссылки отправляется POST запрос, значит отрабатывает JS, который мечанайз выполнять не умеет. 

Так нафига Mechanize знать про какой-то JS? Ему достаточно сделать конкретный POST-запрос с конкретными параметрами.



--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
moonshiner
Дата 20.10.2010, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 13.4.2010

Репутация: нет
Всего: нет



Доброе утро, 

А никто не сталкивался с подобного рода проблемой: 
при попытке сделать post запрос mechanize выкидывает такую ошибку:
 
Цитата

ws-moonshiner# ruby post.rb
/usr/local/lib/ruby/gems/1.8/gems/mechanize-1.0.0/lib/mechanize.rb:464:in `post_form': 500 => Net::HTTPInternalServerError (Mechanize::ResponseCodeError)
    from /usr/local/lib/ruby/gems/1.8/gems/mechanize-1.0.0/lib/mechanize.rb:357:in `post'
    from post.rb:16


сам скрипт: 

Код

require 'rubygems'
require 'mechanize'
require 'logger'

agent = Mechanize.new { |a| a.user_agent_alias = 'Mac Mozilla'}
agent.log = Logger.new(STDOUT)

page = agent.get("http://127.0.0.1/login") 
login_form = page.form_with(:action => "/login")
login_form.username = 'user'
login_form.password = 'pass'
page = agent.submit login_form
  
issues_page = agent.get("http://127.0.0.1/projects/test/issues")

agent.post(issues_page, {
  "priority_id" => "3",
  'tracker_id' => "1",
})


Это сообщение отредактировал(а) moonshiner - 20.10.2010, 10:05
PM MAIL   Вверх
source777
Дата 20.10.2010, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 6
Всего: 56



Цитата(moonshiner @  20.10.2010,  10:01 Найти цитируемый пост)
500 => Net::HTTPInternalServerError

Сервер не может обработать запрос, скорее всего ошибка в запросе.


Цитата(moonshiner @  20.10.2010,  10:01 Найти цитируемый пост)
agent.post(issues_page, {
  "priority_id" => "3",
  'tracker_id' => "1",
})


Ты имел в виду это:
Код

agent.post("http://127.0.0.1/projects/test/issues", {
  "priority_id" => "3",
  'tracker_id' => "1",
})

?



--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
moonshiner
Дата 28.10.2010, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 13.4.2010

Репутация: нет
Всего: нет



День добрый! 

Как выяснилось, приложение "умеет" сохранять форму запросов (выборку drag&drop).. POST запрос не потребовался, задача решена с помощью GET. Всем большое спасибо за помощь! 

Это сообщение отредактировал(а) moonshiner - 28.10.2010, 09:58
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Ruby: Общие вопросы"
source777
  • С чего начать? начинаем
  • Ссылки на полезные ресурсы смотрим тут
  • Обязательно следуйте правилам Vingrad.
  • Пожалуйста, прочитайте рекомендации по работе в форуме и навигации по Vingrad.
  • Для вставки кодов Ruby используйте тег: [code=ruby]код[/code]. Когда в будущем подсветка синтаксиса для Ruby будет реализована, весь исходных код преобразится.
  • Используйтe чекбокс "Транслит" (возле кнопок кодов), если у Вас нет русских шрифтов.
  • Помните, для каждого вопроса должна быть своя тема.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, source777.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Ruby: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1022 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.