Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Создать список WEB-ссылок / запустить их в браузере
Goto page Previous  1, 2, 3, 4, 5  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Loopback



Joined: 07 Sep 2009
Posts: 1550

Post (Separately) Posted: Fri Nov 26, 2010 17:45    Post subject: Reply with quote

Ну в общем действительно, процесс пошел Smile

Форматы Оперы, Orca и хамелеона совсем простые, вечером набросаю парсеры. C JSON надо смотреть, вроде была готовая библиотека парсинга.

Единственное что не понял:
MVV wrote:
Но юзер может использовать и не сеанс по умолчанию, тогда имя файла может быть не autosave.win.

Что подразумевается под "не сеанс по умолчанию"?
Back to top
View user's profile Send private message
Tol!k



Joined: 01 Apr 2008
Posts: 1727
Location: Арзамас

Post (Separately) Posted: Fri Nov 26, 2010 18:52    Post subject: Reply with quote

Loopback wrote:
Единственное что не понял:
MVV wrote:
Но юзер может использовать и не сеанс по умолчанию, тогда имя файла может быть не autosave.win.
Что подразумевается под "не сеанс по умолчанию"?
М.б. MVV о профиле? Тогда autosave.win будет располагаться не в папке по умолчанию.
Но autosave.win всегда будет автосохранением текущей сессии, не важно как сессия названа.
Back to top
View user's profile Send private message
MVV



Joined: 15 Oct 2009
Posts: 4815
Location: Ростов-Дон

Post (Separately) Posted: Fri Nov 26, 2010 19:09    Post subject: Reply with quote

Это хорошо, если при любом сеансе копия последнего будет в autosave.win - я не проверял это.

И как-нибудь надо путь к профилям передавать наверное скриптам.
_________________
TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel…
Back to top
View user's profile Send private message
Samwatas



Joined: 12 Sep 2009
Posts: 95

Post (Separately) Posted: Fri Nov 26, 2010 21:26    Post subject: Reply with quote

Немного инфы по смежной тематике - http://en.wikipedia.org/wiki/Comparison_of_browser_synchronizers
Если бы ТС ограничился только файрфоксом, то дополнение Firefox Sync
могло бы полностью решить все проблемы
Quote:
Free browser add-on that lets you stay in sync with your Firefox. Access your history, passwords, bookmarks and even open tabs across all your devices.

Иначе имеет смысл остановиться на xmarks
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1550

Post (Separately) Posted: Fri Nov 26, 2010 21:57    Post subject: Reply with quote

Ну вот, что получилось (пока в черновом варианте):

Пути к файлам, разумеется, нужно заменить своими.

Сохранение (создает файлик urllist.txt):
Code:

If MsgBox(4 + 32, "Вопрос", "Будут закрыты все открытые браузеры. Продолжать?") = 7 Then Exit

Dim $nBrowserCount = 4
Dim $aResults[$nBrowserCount]

WinClose("[CLASS:OpWindow]")
While WinExists("[CLASS:OpWindow]")
    Sleep(500)
Wend
$aResults[0] = _ParseTabList_Opera(@AppDataDir & "\Opera\Opera\sessions\autosave.win")

WinClose("[CLASS:TfrmBrowserMDIMain.Orca.UnicodeClass]")
While WinExists("[CLASS:TfrmBrowserMDIMain.Orca.UnicodeClass]")
    Sleep(500)
Wend
$aResults[1] = _ParseTabList_Orca("2491128.opg") ; @AppDataDir & "\Orca Profiles\.default\reopen.dat"

WinClose("[CLASS:Chrome_WidgetWin_0]")
While WinExists("[CLASS:Chrome_WidgetWin_0]")
    Sleep(500)
Wend
$aResults[2] = _ParseTabList_Iron(@UserProfileDir & "\Local Settings\Application Data\Chromium\User Data\Default\Current Tabs")

WinClose("[CLASS:KMeleon Browser Window]")
While WinExists("[CLASS:KMeleon Browser Window]")
    Sleep(500)
Wend
$aResults[3] = _ParseTabList_KMeleon("prefs.js") ; @AppDataDir & "\K-Meleon\?????????.default\prefs.js

; уберем дубликаты
$sResult = ""
For $i = 0 To $nBrowserCount - 1
    $aTemp = $aResults[$i]
    For $j = 0 To UBound($aTemp) - 1
        If $aTemp[$j] = "" Then ContinueLoop
        If StringInStr($sResult, $aTemp[$j] & @CRLF) Then ContinueLoop
        $sResult &= $aTemp[$j] & @CRLF
    Next
Next

; сохраним URL-ы
$hFile = FileOpen("urllist.txt", 2)
FileWrite($hFile, $sResult)
FileClose($hFile)

Func _ParseTabList_Opera($sFile)
    Local $nURLCount, $nCount = IniRead($sFile, "session", "window count", "0")
    If $nCount = 0 Then Return ""
    Local $aRet[$nCount-1]
    For $i = 2 To $nCount
        $nURLCount = IniRead($sFile, $i & "history url", "count", "0")
        If $nURLCount = 0 Then ContinueLoop
        $aRet[$i-2] = IniRead($sFile, $i & "history url", $nURLCount - 1, "")
    Next
    Return $aRet
EndFunc

Func _ParseTabList_Orca($sFile)
    Local $hFile = FileOpen($sFile, 128) ; force UTF-8 reading
    Local $aRet = StringRegExp(FileRead($hFile), "(?m)^(http://.+?)\r?$", 3)
    FileClose($hFile)
    Return $aRet
EndFunc

Func _ParseTabList_Iron($sFile)
    Local $hFile = FileOpen($sFile, 16) ; force UTF-8 reading
    $bData = FileRead($hFile)
    $nProtoPos = StringInStr($bData, "687474703A2F2F")
    Local $aTemp[10000] ; должно хватить :)
    Local $nCount = 0
    $pByte = DllStructCreate("byte[4]")
    $pInt = DllStructCreate("uint", DllStructGetPtr($pByte))
    While $nProtoPos > 0
        DllStructSetData($pByte, 1, BinaryMid($bData, $nProtoPos / 2 - 4, 4))
        $nURLSize = DllStructGetData($pInt, 1)
        $bData = BinaryMid($bData, $nProtoPos / 2)
        $aTemp[$nCount] = BinaryToString(BinaryMid($bData, 1, $nURLSize))
        $bData = BinaryMid($bData, $nURLSize)
        $nCount += 1
        $nProtoPos = StringInStr($bData, "687474703A2F2F")
    WEnd
    FileClose($hFile)
    If $nCount = 0 Then Return ""
    ReDim $aTemp[$nCount]
    ; реализуем список исключений
    Local $aRet[$nCount], $nNewCount = 0
    Local $aExcList[1] = ["http://google.com"]
    For $i = 0 To $nCount - 1
        For $j = 0 To UBound($aExcList) - 1
            If StringInStr($aTemp[$i], $aExcList[$j]) = 1 Then ContinueLoop(2)
        Next
        $aRet[$nNewCount] = $aTemp[$i]
        $nNewCount += 1
    Next
    ReDim $aRet[$nNewCount]
    Return $aRet
EndFunc

Func _ParseTabList_KMeleon($sFile)
    Local $sText = FileRead($sFile)
    Local $sURLs = ""
    Local $nWindowCount = StringRegExpReplace($sText, '(?s).+kmeleon.plugins.sessions2.Last\sSession.count",\s?(\d+).+', "\1")
    For $i = 0 To $nWindowCount - 1
        $nTabCount = StringRegExpReplace($sText, '(?s).+kmeleon.plugins.sessions2.Last\sSession.window' & $i & '.count",\s?(\d+).+', "\1")
        For $j = 0 To $nTabCount - 1
            $sCurTab = StringRegExpReplace($sText, '(?s).+kmeleon.plugins.sessions2.Last\sSession.window' & $i & '.tab' & $j & '",\s?"(.+?)".+', "\1")
            $aCurTab = StringSplit($sCurTab, @TAB)
            If $aCurTab[0] >= 5 Then $sURLs &= $aCurTab[5] & @LF
        Next
    Next
    Return StringSplit(StringTrimRight($sURLs, 1), @LF, 2)
EndFunc


Запуск всего из файлика urllist.txt в дефолтном браузере:
Code:

$aURL = StringSplit(FileRead("urllist.txt"), @LF)
For $i = 1 To $aURL[0]
    If $aURL[$i] <> "" Then ShellExecute($aURL[$i])
Next


Парсер Iron-a сделан "в лоб", без разбора структуры, гарантий надежности работы нет, но вроде работает.

Для Orca у меня файла "reopen.dat" не было, зато был некий "2491128.opg". Похоже, его имя генерится случайно.

А вот с K-Melion что-то у меня не сложилось - не сохраняет он у меня вкладки, предлагает только закрыть. Соответственно, нет образца, с которого делать. Просмотр настроек ничего не дал, вроде за это должен отвечать плагин Sessions, он у меня включен, но - см. выше.


Last edited by Loopback on Tue Nov 30, 2010 12:57; edited 6 times in total
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Fri Nov 26, 2010 22:43    Post subject: Reply with quote

Loopback
С Orca и Iron результат нулевой. Для Orca я даже вышеописанные файлы найти не могу. С Оперой работает.
Но запуск производится с открытием каталога в проводнике, где лежит скрипт.
Back to top
View user's profile Send private message
MVV



Joined: 15 Oct 2009
Posts: 4815
Location: Ростов-Дон

Post (Separately) Posted: Fri Nov 26, 2010 23:05    Post subject: Reply with quote

У вас вообще при закрытии Орки сохраняются вкладки? Если нет, включите. Имя файла reopen.dat далеко не случайное - т.е. меняться вряд ли будет.

Flasher wrote:
Но запуск производится с открытием каталога в проводнике, где лежит скрипт.
Видимо, одна из строк пуста или содержит лишь точку - в этом случае вызов функции запуска может открыть текущую папку.

Кстати, я бы запускал не просто ссылки, а нужный браузер со ссылкой в параметре.

Quote:
А вот с K-Melion что-то у меня не сложилось - не сохраняет он у меня вкладки, предлагает только закрыть.
Плагины я вообще не смотрел, а только зашел в настройки - и нашел возможность открывать последние вкладки при запуске.

И на 7 винде надо проверить, где папка профиля хранится. А то некоторые в C:\Users\<Юзер>\AppData\Local, а некоторые - в C:\Users\<Юзер>\AppData\Roaming. У Оперы кажется по умолчанию вообще профиль на 2 части разбит - в одном месте настройки, в другом - история и прочий хлам, или типа того.
_________________
TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel…
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Fri Nov 26, 2010 23:16    Post subject: Reply with quote

MVV wrote:
У вас вообще при закрытии Орки сохраняются вкладки?
Ты имеешь в виду, появляются ли предыдущие вкладки с перезапуском? Да.
MVV wrote:
Видимо, одна из строк пуста
Да, почему-то добавляется пустая строка.
MVV wrote:
Кстати, я бы запускал не просто ссылки, а нужный браузер со ссылкой в параметре.
Было бы неплохо, хоть в техзадании я и говорил о дефолтном.
MVV wrote:
И на 7 винде надо проверить, где папка профиля хранится.
Ну, Loopback изначально предупредил, что пути нужно изменить на правильные, я с этого, собственно, и начал.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Fri Nov 26, 2010 23:44    Post subject: Reply with quote

Значит так, посмотрел куда в Orca записываются текущие ссылки:
"%APPDATA%\Orca Profiles\.default\2230202.opg"
"%APPDATA%\Orca Profiles\.default\mozdata\UserData\Cache\_CACHE_001_"
"%APPDATA%\Orca Profiles\.default\mozdata\UserData\places.sqlite"

Т.е. как можно заметить файл opg в имени имеет рандомные семизначные числа. Но после изменения имени в скрипте ничего в лучшую сторону не изменилось.
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1550

Post (Separately) Posted: Fri Nov 26, 2010 23:50    Post subject: Reply with quote

Flasher
Запуск пустых строк поправил.

Запуск в нужном браузере - нужно просто поменять команду ShellExecute(...) на Run("path\to\browser\browser.exe " & $aURL[$i]) - если браузер просто принимает ссылки как параметр.

MVV wrote:
Имя файла reopen.dat далеко не случайное - т.е. меняться вряд ли будет.

Мдя, программеры этого браузера оригиналы. В общем, если закрывать крестиком - то да, выдается запрос, и вкладки сохраняются в reopen.dat, а если закрыть его двойным кликом по иконке системного меню или Alt+F4 - то сохраняется без запроса в файл со случайным именем и расширением opg. Вот так.

MVV wrote:
Плагины я вообще не смотрел, а только зашел в настройки - и нашел возможность открывать последние вкладки при запуске.

Всё понятно, скачал какую-то бету 1.6.0, в ней ничего в файл не сохраняется. В 1.5.4 работает - вроде, но как-то невразумительно. Имхо, вообще какой-то невнятный браузер.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Sat Nov 27, 2010 00:00    Post subject: Reply with quote

Loopback wrote:
Запуск в нужном браузере - нужно просто поменять команду ShellExecute(...) на Run("path\to\browser\browser.exe " & $aURL[$i]) - если браузер просто принимает ссылки как параметр.
Понял. Спасибо.
Loopback wrote:
В общем, если закрывать крестиком - то да, выдается запрос, и вкладки сохраняются в reopen.dat,
Если галка предварительно не была снята.
Loopback wrote:
Имхо, вообще какой-то невнятный браузер.
Над ним работает малочисленная команда разработчиков-энтузиастов, раскиданных по всей Европе. Да, есть недостатки(и все они описаны), но достоинств, ИМХО, значительно больше.
Кстати, тестировать желательно с этой сборкой.

Также есть такой негативный момент: если Опера закрыта, то ссылки всё равно сохраняются.

Так что с сохранением делать будем?
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1550

Post (Separately) Posted: Sat Nov 27, 2010 00:26    Post subject: Reply with quote

Flasher wrote:
Да, есть недостатки(и все они описаны), но достоинств, ИМХО, значительно больше.

Охотно верю, но первое впечатление - над интуитивностью интерфейса им бы стоило поработать. Для меня совсем было неочевидно, что если программа спрашивает "Закрыть все вкладки?" - это еще не конец, и при определенных настройках они будут открываться при следующем запуске. Но даже при сделанных настройках вопрос о закрытии все равно зачем-то задается.
Впрочем, это уже лирика. Главное что файл я все-таки получил Smile

Flasher wrote:
Также есть такой негативный момент: если Опера закрыта, то ссылки всё равно сохраняются.

Естественно, файл-то существует. Это будет и с остальными браузерами.

Flasher wrote:
Так что с сохранением делать будем?

В смысле?
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Sat Nov 27, 2010 00:41    Post subject: Reply with quote

Loopback wrote:
Главное что файл я все-таки получил Smile
Ещё бы его распарсить. Smile
Loopback wrote:
Естественно, файл-то существует. Это будет и с остальными браузерами.
Хм. Ну тогда это не удовлетворяет ТЗ. Ты же можешь проверять текущие процессы и задать условия выполнения функций?
Loopback wrote:
В смысле?
Ну пишу же, что в двух браузерах не работает.
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1550

Post (Separately) Posted: Sat Nov 27, 2010 01:04    Post subject: Reply with quote

Flasher wrote:
Ещё бы его распарсить.

Распарсим.
Flasher wrote:
Хм. Ну тогда это не удовлетворяет ТЗ. Ты же можешь проверять текущие процессы и задать условия выполнения функций?

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

И еще надо думать, как быть с путями. Если браузер установлен по-умолчанию, тут еще как-то можно попробовать найти нужные файлы, с портабельными версиями это не прокатит.
Flasher wrote:
Ну пишу же, что в двух браузерах не работает.

У меня работает, иначе бы не выкладывал. Высылай свои файлы (чтобы в них хотя бы три-четыре вкладки было), завтра проверю.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Sat Nov 27, 2010 01:55    Post subject: Reply with quote

Loopback wrote:
Ну можно проверять наличие окна браузера или его процесса. Имеет смысл, только если запущено по одной копии каждого браузера.
Насчёт копий не волнуйся, по несколько мне запускать не требуется. А K-Meleon так вообще всегда под одним процессом работает, две копии даже из разных источников запустить не удастся.
Loopback wrote:
Если браузер установлен по-умолчанию, тут еще как-то можно попробовать найти нужные файлы, с портабельными версиями это не прокатит.
Не понял мысль. Браузер по умолчанию может быть только один. И какая разница к каким файлам прописывать пути? Почему не прокатит?

Loopback wrote:
Мдя, программеры этого браузера оригиналы. В общем, если закрывать крестиком - то да, выдается запрос, и вкладки сохраняются в reopen.dat, а если закрыть его двойным кликом по иконке системного меню или Alt+F4 - то сохраняется без запроса в файл со случайным именем и расширением opg. Вот так.
Я тут отловил другой алгоритм. reopen.dat - это временный файл, который живёт до первого открытия браузера, соответственно парсить его можно только когда Орка зактрыт. С opg ровно наоборот. Он записывает текущие ссылки в открытом браузере. Аналогичное поведение и с файлами Current Tabs/Session в профайле Iron. Только они не удаляются, а очищаются при открытии. Т.е. получается, что со всеми браузерами имеет смысл работать, только когда они закрыты. Посему добавляем в сценарий закрытие всех браузеров перед парсингом.

Но пока так и не удалось вытащить ссылки из Орки и Айрона с учётом вышеописанного. Даже пути прописал полные для точности:
Code:
$aResults[1] = _ParseTabList_Orca("*.opg") ; "c:\Users\Flasher\AppData\Roaming\Orca Profiles\.default\reopen.dat"
$aResults[2] = _ParseTabList_Iron("Last Tabs") ; "c:\Users\Flasher\AppData\Local\Chromium\User Data\Default\Last Tabs"
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander All times are GMT + 4 Hours
Goto page Previous  1, 2, 3, 4, 5  Next
Page 3 of 5

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group