<< В начало

Захотелось на будущее написать скрипт, который будет постить автоматом нужный 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, которые записывают действия для последующего проигрывания тут можно реально из языка всё делать динамически и очень просто. С документацией не очень, но исходники открыты…



  • http://sarmanov.com/ext/aHR0cDovLw== Владимир

    С русским все очень просто решается если расширить немного класс String

    как именно расширить нужно смотреть по кодировке на сайте и ту которая у тебя.
    На эту тему скоро опубликую статью на http://smartking.ru

  • http://sarmanov.com/ext/aHR0cDovLw== palladium

    Хорошая статья. Но, а как же быть с русскими буквами?
    Как расширить этот класс String? Как это сделать можно?

  • http://sarmanov.com/ext/aHR0cDovLw== usd.ucoz.ru

    Конечно решается вопрос путем установки “автофаерфокса” (firewatir), но, не совсем то, что хотелось бы.
    Если все таки кому то попадется как без эмулятора FireFoxa, Perl-ом (например) зайти на страницу, где авторизация сделана ява-скриптом, а не стандартной FORM. Авто-ввести там пароль и логин, и потом взять там данные для обработки – черкните здесь http://fxpiter.ucoz.ru (в пункте инфы о сайте), буду весьма признателен.

    PS. Если вход не явовский, а стандартный FORM (метод POST), то решается это легко используя WWW::Mechanize

Группы взаимопомощи пациентов