Захотелось на будущее написать скрипт, который будет постить автоматом нужный URL во все известные сервисы закладок сайтов на свой аккаунт. Я уже писал про ruby библиотеку mechanize, при помощи которой это делать очень просто. Всё достаточно тривиально, полная имитация действий пользователя, описанная скриптовым языком. Но вот незадача – в некоторых сервисах (например в бобре), форма добавления url отрабатывается через javascript, который mechanize не умеет. Поиски натолкнули меня на интересный ruby gem –
(есть ещё предок – ), но он для 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, которые записывают действия для последующего проигрывания тут можно реально из языка всё делать динамически и очень просто. С документацией не очень, но исходники открыты…
-
http://sarmanov.com/ext/aHR0cDovLw== Владимир
-
http://sarmanov.com/ext/aHR0cDovLw== palladium
-
http://sarmanov.com/ext/aHR0cDovLw== usd.ucoz.ru