<< В начало

Захотелось на будущее написать скрипт, который будет постить автоматом нужный URL во все известные сервисы закладок сайтов на свой аккаунт. Я уже писал про ruby библиотеку mechanize, при помощи которой это делать очень просто. Всё достаточно тривиально, полная имитация действий пользователя, описанная скриптовым языком. Но вот незадача - в некоторых сервисах (например в бобре), форма добавления url отрабатывается через javascript, который mechanize не умеет. Поиски натолкнули меня на интересный ruby gem - firewati

(есть ещё предок - watir), но он для IE, которого под линуксом у меня нет, я firefox больше люблю.

Кратко - это и библиотека на руби и extension к firefox, после установки экстеншена и запуска firefox с ключом -jssh extension открывает из браузера порт на локалхосте, к которому происходит коннект из руби для полноценного управления браузером. (В принципе, это может быть и любой другой язык вместо руби - какая разница, чем в сокет писать.)

Код при этом выглядит примерно так:

#!/usr/bin/ruby
require 'rubygems'

@url = "http://xxx.com"
@title = "xxx"
@desc = "xxx"
@tags = "xxx,xxx,xxx"
@tags_pr = @tags.gsub!(/,/,' ')

#Include the FireWatir file.
require 'firewatir'

#include the FireWatir Module.
include FireWatir

ff=Firefox.new

ff.goto("http://bobrdobr.ru")

if ff.text_field(:name,"login")
#Put your user name.
ff.text_field(:name,"login").set("xxx")
#Put your password.
ff.text_field(:name,"password").set("xxx")
#Входим
ff.button(:src,"http://static.bobrdobr.ru/images/enter.gif").click
end
#добавляем
ff.goto("http://bobrdobr.ru/addurl.html")

ff.text_field(:name,"url").set(@url)
ff.text_field(:name,"title").set(@title)
ff.text_field(:name,"description").set(@desc)
ff.text_field(:name,"tags").set(@tags)

ff.button(:src,"http://static.bobrdobr.ru/images/save.gif").click

Вуаля=) Правда с русским языком при передаче проблемы - корябается…
Таким образом, этот движок можно использовать как частичную замену юнит тестингу, в отличии от extensions, которые записывают действия для последующего проигрывания тут можно реально из языка всё делать динамически и очень просто. С документацией не очень, но исходники открыты…



Комментариев нет»

Нет комментариев


куку (введите антиспам код) сменить