LINUX.ORG.RU

Как программно открыть FF запустить в нем страницу, сохранить её и закрыть FF?


0

0

Всем доброго времени суток! Появилась такая задача. Нужно программно запустить через Firefox заранее заданную страницу, сохранить её, найти в ней все ссылки, закрыть Firefox и повторить теже действия с любой из найденных на предыдущем шаге ссылок. В программировании под Линуксом я новичок, ранее сидел под вантузом, поэтому огромная просьба помочь!

P.S. Задачу желательно решить на С/С++, но сгодится и скриптовый вариант.

P.S.2 В принципе почти устраивает wget, но фишка в том, что просто закачать страницу мало. Надо ещё её запустить, чтобы она отослала сообщение на сервак.

Заранее благодарен за помощь.


Ответ на: комментарий от Amuser

то что тебе нужно называется краулер

Reset ★★★★★
()
Ответ на: комментарий от wfrr

С wget вроде как разобрался. Нравицца возможность грузить куки. Но ведь запускать скачанную страницу с учетом этих же куков НЕЛЬЗЯ??? Или я ошибаюсь?

Amuser
() автор топика

Чувствуется виндоус-школа.
Все решения - чистая проктология.

ovax ★★★
()

человек, тебе тут уже дали целый ряд советов, как удалить гланды через жопу, т.е. как сделать то, о чем ты спрашивал.
может, ты все же скажешь какая у тебя задача, а не что ты хочешь сделать, тогда мы тебе поможем правильными вариантами и их реализациями.

val-amart ★★★★★
()
Ответ на: комментарий от val-amart

Вот и я о том-же.
Вместо того, чтобы придти на форум и спросить: "ребята, хочу удалить гланды. как ?"
Начинается :
- рука не влезала в жопу. Я сделал на жопе разрез, но рука дальше локтя всё равно не лезет. Как просунуть поглубже ?

И сиди гадай, зачем человек вообще руку в жопу суёт...

ovax ★★★
()

Какой-то совсем не юниксвей и даже не виндузвей, по моим представлениям это амигавей... почему именно FF(нужно чтобы он пропустил через свои плагины, например adblock или еще чего-то), если нужен просто движок, стоит на какой нить скриптовой язык с биндингами gecko(например python, была статья с примером, правда старая).. потом наверняка если надо обработать ссылки на js то это для 1-2 сайтов, можно и посмотреть код и понять куда они в итоге ведут, написать скрипт. И если уж без FF никак, то смотреть надо на плагины, возможно есть что то похожее.

oWeRQ
()

О, спрева слово "Программно" прочитал как "грамотно"

Siado ★★★★★
()

А почему именно ФФ? Зачем открывать страницу?

rual_ilmarranen
()

Selenium, webrat, webdriver. В принципе, это все для тестирования, но такие вещи они умеют.

svr69 ★★
()
Ответ на: комментарий от svr69

может, ты все же скажешь какая у тебя задача...

В общем задача следующая: Есть сайт (не мой), на который мне надо периодически за день заходить. На сайте ведется учет посещений. Но лазить мне туда вручную влом. Сайт регистрирует посещение, если после регистрации я открою один из его разделов (т е тупо открою одну из его внутренних страниц) - это проверено. На сайт можно зайти только под логином. Фишка в том, что мне надо посещать этот сайт не от одного, а от двух логинов. Параметры пользователей сохраняются в куках. На FF проверил, что если менять файлы куков и перезапускать FF, то можно легко заходить под разными логинами. На самом деле мне НЕ ВАЖНО какой будет браузер - FF взят для конкретности.

Как я понял проще всего это сделать в виде bash-скрипта. Т.е. мне нужны функции: копирования-удаления файлов, запуска-закрытия программ, функция поиска по тексту (чтобы в хтмл-коде найти ссылки).

В общем для начала посоветуйте офигительный русский справочник по баш-скриптам.

Для запуска ФФ как понял можно юзать exec /usr/bin/firefox http://www.anysite.ru

Остальное просьба помочь. Прежде всего с учебником потому то, что я нашел либо на английском, либо слишком поверхностные.

Amuser
() автор топика
Ответ на: комментарий от Amuser

Логинишься и сохраняешь кукисы:
wget --save-cookies ~/.cookies/file --post-data "login=USERNAME&password=PASSWORD" -O - anysite.ru > /dev/null

Используешь полученные кукисы:
wget -c --load-cookies ~/.cookies/file anysite.ru

arhibot
()
Ответ на: комментарий от arhibot

Я это уже проходил. Уже так делал.

Еще раз повторю: просто с нужными куками закачать страницу МАЛО! Учет посещения этой страницы ведется таким образом, что после её ЗАПУСКА отсылается запрос серверу на выполнение ПХП-скрипта, который с учетом инфы в куках засчитывает тому или иному пользователю посещение этой страницы.

Вот поэтому и нужно: 1. Скопировать файл куков (для ФФ это cookies.sqlite) в нужную директорию.

2. Запустить в браузере страницу (н-р exec /usr/bin/firefox URL).

3. На этой странице ссылки меняются часто, но выглядят все однотипно, поэтому по шаблону в хтмл коде найти <a src="...">, взять оттуда ссылку.

4. Аналогично пункту 2 перейти по найденной ссылке.

5. Закрыть браузер.

6. Повторить действия 1-5 для другого логина.

ЗЫ Нашел толковый учебник http://www.opennet.ru/docs/RUS/bash_scripting_guide/

Изучаю..., но буду признателен, если кто-то реализует пункты 1-5 прежде, чем я освою вышеуказанный мануал.

Amuser
() автор топика
Ответ на: комментарий от Amuser

ЗЫ №2 Ссылка в пункте 2 известна заранее. Это стартовая страница пользователя. На нее он логинится автоматически благодаря кукам.

Amuser
() автор топика
Ответ на: комментарий от Amuser

можно не гонять туда-сюда файл с куками, а воспользоваться менеджером профилей firefox. гуглить в сторону firefox -profilemanager

BreadFan ★★
()
Ответ на: комментарий от Amuser

>Еще раз повторю: просто с нужными куками закачать страницу МАЛО! Учет посещения этой страницы ведется таким образом, что после её ЗАПУСКА отсылается запрос серверу на выполнение ПХП-скрипта, который с учетом инфы в куках засчитывает тому или иному пользователю посещение этой страницы.

Объясните мне, несведущему, что ты имеешь ввиду под "ЗАПУСКОМ страницы"? Страница исполняет какието JavaScript`ы или что? Что ещё за "запуск"?

>3. На этой странице ссылки меняются часто, но выглядят все однотипно, поэтому по шаблону в хтмл коде найти <a src="...">, взять оттуда ссылку.

Ну так и прогрепай вывод wget (который тебе уже написали выше) на предмет этой ссылки и сходи по ней тем же вгетом.

Nao ★★★★★
()
Ответ на: комментарий от Nao

>Объясните мне, несведущему, что ты имеешь ввиду под "ЗАПУСКОМ страницы"?

По-моему он считает, что если вгетом запросить адрес "http://bla-bla/foo.php", то вместо отработки скрипта на сервере и выдачи результата (как в браузере), ему прилетит исходник скрипта.

Но телепатию я в школе прогуливал, поэтому могу ошибаться.

MYMUR ★★★★
()
Ответ на: комментарий от MYMUR

MYMUR! Прямо в точку!!! Ведь если я вгетом загружу некую страницу, с которой автоматически отсылается запрос на другую страницу, то ведь он не будет выполнен, потому что вгет воспринимает любую страницу лишь как текст кода. Или я не прав?

C curl'ом при попытке посыла этого запроса вручную пока получается не то, что надо.

Amuser
() автор топика
Ответ на: комментарий от Amuser

>....потому что вгет воспринимает любую страницу лишь как текст кода.

Вгет ничего не "воспринимает". Он даёт запрос веб-серверу "а дай-ка мне страничку такую-то" и ждёт, чего ему прилетит в ответ. А веб-сервер выдавать исходники скрипта не обучен (по крайней мере мне пока такие не попадались), вместо этого он действует тупо, как валенок: выполняет скрипт и выплёвывает результат, и ему совершенно монопенисуально, кто запросил у него страницу: ФФ, wget или вообще самописный велосипед на питоне или лиспе.

Если проблема в том, что страница автоматом редиректится на известный адрес, то в чём проблема сразу дёргать этот адрес минуя ту, с которой идёт редирект? Куки есть? Есть. Скармливаем их вгету и получаем чего хотим.

Или куки как-то хитро обновляются как раз при посещении "исходной" страницы?

MYMUR ★★★★
()
Ответ на: комментарий от MYMUR

даже если и обновляются. все равно можно выполнить один запрос на главную страницу с исходными куки, а потом на другую с новыми.

val-amart ★★★★★
()
Ответ на: комментарий от maloi

Вот ещё некоторые полученные факты:

Из страницы А нада запустить страницу B. На странице В есть яваскрипт, который через минуту ссылается на пхп страницу на сервере. Если минута прошла пхп возвращает ОК, если нет то Извини мол.

Как это работает на ФФ:

Первым делом грузим куки нужного юзера 1

Обязательно надо сначала открыть страницу А и держать её во время всей работы юзера 1, иначе пхп будет выдавать СОРРИ даже если прошла минута.

В следующих вкладках открываем страницы B1, B2, B3 ... с временным интервалом 70 сек (с припуском на загрузку страницы).

Что получается при реализации на вгет:

Естественно, подключаю заранее сохраненные куки (они не изменяются) с помощью --load-cookies

>это, отсылавть referer уже советовали?

Пробовал --referer

для В - значение А для пхп - значения В и А (тута А по идее должно подходить т.к. проверено, если запустить А, сразу её закрыть, подождать минуту и вручную запустить пхп, то если открыта А, то приходит ответ ОК).

Но почему-то на вгет всё-время приходит ответ X##

Amuser
() автор топика
Ответ на: комментарий от Amuser

>для В - значение А для пхп - значения В и А (тута А по идее должно подходить т.к. проверено, если запустить А, сразу её закрыть, подождать минуту и вручную запустить пхп, то если открыта А, то приходит ответ ОК).

Тут опечатка! Должно быть так:

для В - значение А

для пхп - значения В и А (тута А по идее должно подходить т.к. проверено, если запустить В(!!! не А как в опечатке), сразу её закрыть, подождать минуту и вручную запустить пхп, то если открыта А, то приходит ответ ОК).

Amuser
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.