Нашел исполнителя для плагина по программному управлению браузером Fire Fox. Я предлагал 2000, договорились за 3000.
Если получится, то наконец-то соскочу с единственного программно управляемого браузера - IE. Тогда у меня будет единственный в мире программно управляемый браузер FireFox.
Правда, зарабатывать на таких вещах я не умею, поэтому поделюсь с All. На Dotation Ware я и не надеюсь, до этого надо морально созреть.
ТЗ под катом.
ТЗ по задаче «Плагин для FireFox для управления браузером»
Требуется разработать плагин для управления браузером FireFox.
Краткое описание
После запуска плагин постоянно контролирует наличие командных файлов в заданном каталоге и может выполнять команды:
1. Открыть новый таб и перейти по заданному адресу, не фокусируя новый таб, вернуть идентификатор таба в качестве ответа после загрузки страницы.
2. Получить текст страницы (не исходный код, а текущий отображаемый текст, т.е. после загрузки и выполнения джава-скриптов).
3. Выполнить переданную команду на Java-Script, например команду заполнения текста и нажатия кнопки (js-файл) в контексте переданного по идентификатору таба.
Подробное описание
В настройках плагина указывается каталог обмена информацией с управляющей программой (УП).
Плагин работает в отдельном окне браузера. В этом окне он может открывать новые закладки. Если этого окна нет, оно создается и помечается, что это окно для плагина, т.е. в чужие окна плагин не залазит. Для каждой открытой закладки он присваивает некий GUID, чтобы можно было сослаться на конкретную закладку.
В каталоге обмена помещаются XML- запросы к браузеру в файлах вида requestGUID.xml. Здесь GUID – уникальный идентификатор запроса. Запросы выполняются последовательно (если есть возможность и не сложно, лучше параллельно). XML-ответы на запросы помещаются в файлы вида answerGUID.xml. GUID файлов запроса и ответа совпадают. При начале обработки запроса файл запроса удаляется.
Кодировка файлов ответа и запроса UTF-8.
Корневой элемент XML называется data.
XML файл должен быть корректным XML файлом.
В описании структуры xml файлов все поля приводятся с учетом регистра букв, все буквы латинские. Все GUID передаются без дефисов в виде 16 знаков.
В файле запроса обычно имеются поля:
- timeout – таймаут выполнения запроса в секундах. Если ноль, то время не ограничено, иначе запрос должен выполняться не более заданного времени.
- command – имя команды
- page – GUID страницы.
- start – время начала запроса
- wait – если задан, то ждать загрузки страницы в пределах timeout (true/false)
В файле ответа обычно имеются поля:
- page – GUID страницы
- ok – true или false в зависимости от результата операции.
Команды
Параметры команды задаются на общем уровне с полями запроса.
Пример XML-файла запроса с командой navigate (экранирование спецсимволов не используется для простоты восприятия):
<?xml version="1.0" encoding="UTF-8"?>
<data>
<command>navigate</command>
<page>fffe8899ffac78ff</page>
<url>http://forum.ru/viewtopic.php?id=12345</url>
<wait>true</wait>
</data>
Navigate
navigate - переход на заданный адрес.
url – адрес перехода.
Если page не задан, то в новой закладке.
В поле html возвращается HTML страницы.
В поле page возвращается GUID новой закладки.
Stop
stop – остановка загрузки страницы.
page должен быть задан.
Status
status – проверка статуса закладки.
page должен быть задан.
В поле readystate возвращается статус загрузки страницы.
В поле html возвращается HTML страницы.
В поле open возвращается открыта ли страница (true/false).
Refresh
refresh – обновить закладку.
page должен быть задан.
Сlose
close – закрыть закладку.
page должен быть задан.
Run
run – выполнить некоторый java-script код в объектной модели DOM на указанной странице.
page должен быть задан.
code – текст кода на java-script.
В java-script должен быть доступен некоторый объект, например documentelem, который ссылается на DOM документа.
wait – если задан, то ждать выполнения кода (true/false). Если задан в true, то ответ получается после выполнения кода в пределах timeout.
SaveImage
saveimage – сохранение изображения.
url – путь к картинке
filename – в какой файл сохранять
Картинка должна быть на странице, идентифицируется по пути к картинке, совпадающему с переданным url.
При возникновении объективных сложностей с выполнением этой команды ее можно исключить из ТЗ.
Особенности
Если возвращается поле page, то требуется также возвращать и поле dialog, в котором возвращается непустая строка, если открыто окно вопроса/предупреждения, в этом случае возвращается текст вопроса /предупреждения. Появление вопроса/предупреждение следует считать окончанием загрузки страницы. Т.е. плагин должен обрабатывать возникновение таких ситуаций, IE в этом случае находится в readystate = 3. Также плагин должен закрывать страницы по команде close с такими открытыми диалоговыми окнами.
ТЗ рассчитано на то, что можно передавать JS-код через плагин браузеру. Если это не поддерживается плагином, нужно искать другие возможности управления страницей.
Выполнение перемещения по страницам не должно мешать работе пользователя на компьютере. Окно браузера не должно получать фокус ввода при перемещении по страницам.
Если прошел отбой команды по тайм-ауту, то нужно возвращать все равно недозагруженный текст страницы html для анализа причин таймаута.
Сканировать каталог нужно так часто, чтобы это не сказывалось на производительности компьютера. Можно частоту сканирования вынести в параметр плагина. Для оптимизации можно удалять старые запросы и каталог запросов и ответов разнести по разным подкаталогам.
Требования к разработке
Должны быть переданы исходники, чтобы можно было .
Гарантирую указание авторства разработки при публикациях разработки в интернете.
Разработка используется в личных, а не коммерческих целях, по крайней мере в ближайшую пятилетку.
Требования к сдаче
Желательно разделить разработку на два этапа.
На первом убедиться, что реализация возможна, реализовать черновой вариант (60% оплаты).
На втором поправить ошибки, которые будут замечены в процессе эксплуатации (40% оплаты).
Journal information