View previous topic :: View next topic |
Author |
Message |
Loopback
Joined: 07 Sep 2009 Posts: 1550
|
(Separately) Posted: Fri Nov 26, 2010 17:45 Post subject: |
|
|
Ну в общем действительно, процесс пошел
Форматы Оперы, Orca и хамелеона совсем простые, вечером набросаю парсеры. C JSON надо смотреть, вроде была готовая библиотека парсинга.
Единственное что не понял:
MVV wrote: | Но юзер может использовать и не сеанс по умолчанию, тогда имя файла может быть не autosave.win. |
Что подразумевается под "не сеанс по умолчанию"? |
|
Back to top |
|
 |
Tol!k

Joined: 01 Apr 2008 Posts: 1727 Location: Арзамас
|
(Separately) Posted: Fri Nov 26, 2010 18:52 Post subject: |
|
|
Loopback wrote: | Единственное что не понял:
MVV wrote: | Но юзер может использовать и не сеанс по умолчанию, тогда имя файла может быть не autosave.win. | Что подразумевается под "не сеанс по умолчанию"? | М.б. MVV о профиле? Тогда autosave.win будет располагаться не в папке по умолчанию.
Но autosave.win всегда будет автосохранением текущей сессии, не важно как сессия названа. |
|
Back to top |
|
 |
MVV

Joined: 15 Oct 2009 Posts: 4815 Location: Ростов-Дон
|
|
Back to top |
|
 |
Samwatas
Joined: 12 Sep 2009 Posts: 95
|
(Separately) Posted: Fri Nov 26, 2010 21:26 Post subject: |
|
|
Немного инфы по смежной тематике - 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 |
|
 |
Loopback
Joined: 07 Sep 2009 Posts: 1550
|
(Separately) Posted: Fri Nov 26, 2010 21:57 Post subject: |
|
|
Ну вот, что получилось (пока в черновом варианте):
Пути к файлам, разумеется, нужно заменить своими.
Сохранение (создает файлик 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 |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Fri Nov 26, 2010 22:43 Post subject: |
|
|
Loopback
С Orca и Iron результат нулевой. Для Orca я даже вышеописанные файлы найти не могу. С Оперой работает.
Но запуск производится с открытием каталога в проводнике, где лежит скрипт. |
|
Back to top |
|
 |
MVV

Joined: 15 Oct 2009 Posts: 4815 Location: Ростов-Дон
|
(Separately) Posted: Fri Nov 26, 2010 23:05 Post subject: |
|
|
У вас вообще при закрытии Орки сохраняются вкладки? Если нет, включите. Имя файла 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 |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Fri Nov 26, 2010 23:16 Post subject: |
|
|
MVV wrote: | У вас вообще при закрытии Орки сохраняются вкладки? | Ты имеешь в виду, появляются ли предыдущие вкладки с перезапуском? Да. MVV wrote: | Видимо, одна из строк пуста | Да, почему-то добавляется пустая строка. MVV wrote: | Кстати, я бы запускал не просто ссылки, а нужный браузер со ссылкой в параметре. | Было бы неплохо, хоть в техзадании я и говорил о дефолтном. MVV wrote: | И на 7 винде надо проверить, где папка профиля хранится. | Ну, Loopback изначально предупредил, что пути нужно изменить на правильные, я с этого, собственно, и начал. |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Fri Nov 26, 2010 23:44 Post subject: |
|
|
Значит так, посмотрел куда в 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 |
|
 |
Loopback
Joined: 07 Sep 2009 Posts: 1550
|
(Separately) Posted: Fri Nov 26, 2010 23:50 Post subject: |
|
|
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 |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sat Nov 27, 2010 00:00 Post subject: |
|
|
Loopback wrote: | Запуск в нужном браузере - нужно просто поменять команду ShellExecute(...) на Run("path\to\browser\browser.exe " & $aURL[$i]) - если браузер просто принимает ссылки как параметр. | Понял. Спасибо. Loopback wrote: | В общем, если закрывать крестиком - то да, выдается запрос, и вкладки сохраняются в reopen.dat, | Если галка предварительно не была снята. Loopback wrote: | Имхо, вообще какой-то невнятный браузер. | Над ним работает малочисленная команда разработчиков-энтузиастов, раскиданных по всей Европе. Да, есть недостатки(и все они описаны), но достоинств, ИМХО, значительно больше.
Кстати, тестировать желательно с этой сборкой.
Также есть такой негативный момент: если Опера закрыта, то ссылки всё равно сохраняются.
Так что с сохранением делать будем? |
|
Back to top |
|
 |
Loopback
Joined: 07 Sep 2009 Posts: 1550
|
(Separately) Posted: Sat Nov 27, 2010 00:26 Post subject: |
|
|
Flasher wrote: | Да, есть недостатки(и все они описаны), но достоинств, ИМХО, значительно больше. |
Охотно верю, но первое впечатление - над интуитивностью интерфейса им бы стоило поработать. Для меня совсем было неочевидно, что если программа спрашивает "Закрыть все вкладки?" - это еще не конец, и при определенных настройках они будут открываться при следующем запуске. Но даже при сделанных настройках вопрос о закрытии все равно зачем-то задается.
Впрочем, это уже лирика. Главное что файл я все-таки получил
Flasher wrote: | Также есть такой негативный момент: если Опера закрыта, то ссылки всё равно сохраняются. |
Естественно, файл-то существует. Это будет и с остальными браузерами.
Flasher wrote: | Так что с сохранением делать будем? |
В смысле? |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sat Nov 27, 2010 00:41 Post subject: |
|
|
Loopback wrote: | Главное что файл я все-таки получил | Ещё бы его распарсить.  Loopback wrote: | Естественно, файл-то существует. Это будет и с остальными браузерами. | Хм. Ну тогда это не удовлетворяет ТЗ. Ты же можешь проверять текущие процессы и задать условия выполнения функций? Loopback wrote: | В смысле? | Ну пишу же, что в двух браузерах не работает. |
|
Back to top |
|
 |
Loopback
Joined: 07 Sep 2009 Posts: 1550
|
(Separately) Posted: Sat Nov 27, 2010 01:04 Post subject: |
|
|
Flasher wrote: | Ещё бы его распарсить. |
Распарсим.
Flasher wrote: | Хм. Ну тогда это не удовлетворяет ТЗ. Ты же можешь проверять текущие процессы и задать условия выполнения функций? |
Ну можно проверять наличие окна браузера или его процесса. Имеет смысл, только если запущено по одной копии каждого браузера.
И еще надо думать, как быть с путями. Если браузер установлен по-умолчанию, тут еще как-то можно попробовать найти нужные файлы, с портабельными версиями это не прокатит.
Flasher wrote: | Ну пишу же, что в двух браузерах не работает. |
У меня работает, иначе бы не выкладывал. Высылай свои файлы (чтобы в них хотя бы три-четыре вкладки было), завтра проверю. |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sat Nov 27, 2010 01:55 Post subject: |
|
|
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 |
|
 |
|
|
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
|