Что нового

Opera Library - Библиотека для работы с браузером Opera

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
AutoIt: 3.2.10.0+
Версия: 1.8

Категория: Автоматизация, Браузеры

Описание: Библиотека позволяющая работать с браузером Opera. Однако не следует ожидать от неё тех же возможностей которые есть в IE.au3, Opera является безопасным браузером, поэтому не имеет COM-объекты и подобные модули доступа к функциям (которые есть в IE), что считается плюсом всего что касается надёжности.
Данная библиотека в основном предназначена для написания внешних дополнений к браузеру и автоматизация их интеграции.

Внимание: Эта библиотека проверялась и поддерживается на следующих версиях Opera: 8.54-9.5, 10.63.3516, некоторые критичные функций проверялись и на 11.x-12.x

Пример - Интеграция вашей программы (скрипт должен быть скомпилирован):
Код:
#include "Opera.au3"

Global $sApp_Name = "My Opera Tool"

_App_Integrate_Call()

Func _App_Integrate_Call()
	Local $aMessages[13] = [ _
		$sApp_Name & " - Opera Integrator", _
		"Integration to Opera", _
		"Would you like to integrate this program into Opera Browser?", _
		"Path to browser Opera", _
		"Enter Opera Browser installation path:", _
		"OK", _
		"Cancel", _
		"Please Select Opera dir", _
		"Can not find Opera files (%s), please select folder with Opera Browser...", _
		"Attention", _
		"Finishing..", _
		"Integration to Opera is successfully completed!", _
		"There was an error (%i) while trying to integrate." _
		]
	
	_Opera_Integration_Module($aMessages, "_App_Integrate_Proc")
EndFunc

Func _App_Integrate_Proc($sOpPath)
	If Not @Compiled Then
		;Compile?
		Return SetError(1)
	EndIf
	
	If _OperaIsRunning($sOpPath) Then
		MsgBox(48, 'Attention', 'Opera is running, please close it and try again.')
		Return
	EndIf
	
	Local $sApp_Dest_Path = $sOpPath & "\" & $sApp_Name & "\" & @ScriptName
	
	FileCopy(@ScriptFullPath, $sApp_Dest_Path, 8+1)
	
	_OperaAddMenuItem("Tools.Menu", 'Item, "' & $sApp_Name & '"', 'Execute program, "' & $sApp_Dest_Path & '",,, "Attachment Archives"', 1, -1, $sOpPath)
	_OperaAddMenuItem("Tools.Menu", '------------' & StringStripWS($sApp_Name, 8), '', 2, -1, $sOpPath)
EndFunc

Скачать: Opera_Library.zip
(во вложениях старые версии)

Снимок:
Opera_AutoIt.png

Источник: Офф. форум
Автор(ы): G.Sandler (CreatoR)
 
Z

Zloy_Gelud

Гость
Отличная библиотека! Как раз сегодня пригодилась! :ok:
 

r35p3ct

Продвинутый
Сообщения
228
Репутация
60
Планируется ли расширение работы со вкладками, хотябы простое закрытие последней?
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
r35p3ct [?]
расширение работы со вкладками, хотябы простое закрытие последней?
Это можно сделать только имитацией г. клавиш (по умолчанию это «Ctrl + W»). Кстати будет полезна функция типа _OperaFindHotkeyAction - поиск горячей клавиши по действию, что поможет определить какая клавиша назначена на закрытие вкладки (текущей в данном случае).


Добавлено:
Сообщение автоматически объединено:

Вот так примерно:

Код:
#include <Opera_Library.au3>
#include <Array.au3>

$aHotKeys = _OperaGetActionHotkey("(?i)Close page.*", 1, "C:\Program Files\Opera")
_ArrayDisplay($aHotKeys)

Func _OperaGetActionHotkey($sAction, $iUseRegExp = 0, $sOpDir = -1)
	Local $sKeyboard_File = _OperaGetConfigFile("Keyboard", $sOpDir)
	If @error Then Return SetError(1, 0, 0)
	
	Local $aHotKeys_Section = IniReadSection($sKeyboard_File, "Application")
	If @error Then Return SetError(2, 0, 0)
	
	Local $aRet_HotKeys[$aHotKeys_Section[0][0]+1][2] = [[0]]
	
	For $i = 1 To $aHotKeys_Section[0][0]
		If ($iUseRegExp And StringRegExp($aHotKeys_Section[$i][1], $sAction)) Or _
			(Not $iUseRegExp And $aHotKeys_Section[$i][1] = $sAction) Then
			
			$aHotKeys_Section[$i][0] = StringRegExpReplace($aHotKeys_Section[$i][0], "(?i)platform.*?,|feature.*?,", "")
			$aHotKeys_Section[$i][0] = StringRegExpReplace($aHotKeys_Section[$i][0], "(?i)(f\d+)", "{\1}")
			$aHotKeys_Section[$i][0] = StringReplace($aHotKeys_Section[$i][0], "ctrl", "^")
			$aHotKeys_Section[$i][0] = StringReplace($aHotKeys_Section[$i][0], "shift", "+")
			$aHotKeys_Section[$i][0] = StringReplace($aHotKeys_Section[$i][0], "alt", "!")
			$aHotKeys_Section[$i][0] = StringStripWS($aHotKeys_Section[$i][0], 8)
			$aHotKeys_Section[$i][0] = StringRegExpReplace($aHotKeys_Section[$i][0], "(?i)(.*?)([\^\+!]+)(.*?)", "\2\1\3")
			
			$aRet_HotKeys[0][0] += 1
			$aRet_HotKeys[$aRet_HotKeys[0][0]][0] = $aHotKeys_Section[$i][1]
			$aRet_HotKeys[$aRet_HotKeys[0][0]][1] = $aHotKeys_Section[$i][0]
		EndIf
	Next
	
	If $aRet_HotKeys[0][0] = 0 Then Return SetError(3, 0, 0)
	
	ReDim $aRet_HotKeys[$aRet_HotKeys[0][0]+1][2]
	Return $aRet_HotKeys
EndFunc
 

HukpoFuJl

AццkuЙ HukpoFuJl
Сообщения
98
Репутация
38
планируется ли создание библиотеки для оперы, для использования её как браузера, а не как программы... т.е. аналог библиотек под ИЕ и Файерфокс... С функциями вродe _OperaGetObjByID, _OperaAction, _OperaClickOnPicture и т.п. ?
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
CreatoR [?]
Opera является безопастным браузером, поэтому не имеет COM-объекты и подобные модули доступа к функциям (которые есть в IE), что считается плюсом всего что касается надёжности.

HukpoFuJl
Что вам из этого непонятно?
 

HukpoFuJl

AццkuЙ HukpoFuJl
Сообщения
98
Репутация
38
Medic84 сказал(а):
CreatoR [?]
Opera является безопастным браузером, поэтому не имеет COM-объекты и подобные модули доступа к функциям (которые есть в IE), что считается плюсом всего что касается надёжности.

HukpoFuJl
Что вам из этого непонятно?
Извиняюсь, читал не внимательно =))
 

XM

Знающий
Сообщения
70
Репутация
8
CreatoR,

Я так понимаю, некоторые функции библиотеки работают только в случае, если Opera установлена в "едином" каталоге (C:\Program Files\Opera, например) вместе со всеми скинами, плагинами, дампами посещенных страниц, иконок сайтов и пр.
Т.е. не учитываются пути как "%USERPROFILE%\%APPDATA%\Opera\..." и т.п. ??
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481

XM

Знающий
Сообщения
70
Репутация
8
CreatoR сказал(а):
Например функция
Код:
_OperaFindDir()

прекрасно находит путь установки Opera и возвращает соотв. массив.

Далее: функции

Код:
_OperaGetDir(),  _OperaGetVersion(), _OperaGetTitle()

тоже справляются со своей задачей, но как дело доходит до

Код:
_OperaGetProfileDir()

и далее... тут начинаются 'проблэмы' :smile: Возвращает коды ошибок.

Vendor: не учитываются пути как "%USERPROFILE%\%APPDATA%\Opera\..." и т.п. ?
CreatoR: Учитываются, есть обратные показатели?

Я, видите ли, тоже большой поклонник этого браузера, и как-то тоже сочинил небольшой скриптик для бэкапа 'всего этого' на случай непредвиденных ситуаций, таких как переустановки системы и пр...
Единственно что, этот скриптик был (есть) заточен именно под мою машину, т.е. там были предварительно прописаны пути сохранения, и он 'выдирал' необходимые папки/файлы из всех каталогов, с какими связан сам браузер и все это дело копировал в папку назначения, причем упаковывая в архив (RAR).

Смысл в чем - я заранее уже закладывал в скрипт все необходимые пути. Но Ваша библиотека призвана быть универсальной (своего рода), т.е. находить все сопряженные с самим браузером папки и файлы.

Выделим один (но далеко не единственный) случай:
функция
Код:
_OperaGetProfileDir()
:

Код:
#include <Opera.au3> ; Я так переименовал UDF (оригин: Opera_Library...)
#include <Array.au3>

; Return errors:
;             1 - $sOpDir (Opera Dir) not found.
;             2 - Opera6.ini (main Opera's config file) not found.
;
; My Profile ini = C:\Documents and Settings\Admin\Application Data\Opera\Opera\profile\opera6.ini

;$sOpDir = _OperaGetDir()
$ret = _OperaGetProfileDir()
MsgBox(0, '', 'State: ' & @error & @CRLF & 'Return: ' & $ret)


Возвращает результат:

Код:
@error = 2


т.е. в контексте: "Opera6.ini (main Opera's config file) not found."

или мой (в данном случае) путь:
Код:
; C:\Documents and Settings\Admin\Application Data\Opera\Opera\profile\opera6.ini


не найден...
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Vendor [?]
Эта функция находит папки установки Opera, зачем там профили?

Выделим один (но далеко не единственный) случай
Мда, проблема в том что при мультипользовательском режиме папка profile не присутствует, этот баг можно исправить заменив в библиотеке функцию _OperaGetProfileDir:

Код:
Func _OperaGetProfileDir($sOpDir = -1)
	If Not __PathIsOperaDir($sOpDir) Then
		$sOpDir = _OperaGetDir()
	EndIf
	
	If @error Then
		Return SetError(1, 0, "")
	EndIf
	
	Local $sOperaPrefs_FileName = __GetOperaPrefsFileName($sOpDir, 0)
	
	If _OperaMultiUserModeIsOn($sOpDir) Then
		$sOpDir = @AppDataDir & "\Opera\" & StringRegExpReplace($sOpDir, "^.*\\", "")
		
		If Not __PathIsOperaConfigFile($sOpDir & "\" & $sOperaPrefs_FileName) Then
			Return SetError(2, 0, "")
		EndIf
		
		Return $sOpDir 
	Else
		If Not __PathIsOperaConfigFile($sOpDir & "\profile\" & $sOperaPrefs_FileName) Then
			Return SetError(2, 0, "")
		EndIf
		
		Return $sOpDir & "\profile"
	EndIf
EndFunc
 

XM

Знающий
Сообщения
70
Репутация
8
...этот баг можно исправить заменив в библиотеке функцию _OperaGetProfileDir:...
вот-вот-вот, теперь отрабатывает как надо. Если привязать остальные функции к этой, то в принципе можно будет сказать, что библиотека для ALL-юзеров ;)
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Vendor [?]
Если привязать остальные функции к этой, то в принципе можно будет сказать, что библиотека для ALL-юзеров
Они и так привязаны к ней.
 

k790

Новичок
Сообщения
239
Репутация
1
Подскажите, как мне узнать пути оперы в %userprofile% ?
Подойдёт?
Код:
#include <GUIConstantsEx.au3>
#include <Opera_Library.au3>


$OperaDir = _OperaGetDir()
$OperaProfileDir = _OperaGetProfileDir($OperaDir)
$OpTitle = _OperaGetTitle($OperaDir)
                MsgBox(4096, "5", $OperaProfileDir )

А то я вижу только в опере дир-оперу ас, а обычной оперы нет :(
 

k790

Новичок
Сообщения
239
Репутация
1
Забыл написать, опера 11 , я так вижу на ней ещё никто не тестил?
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
k790 [?]
я вижу только в опере дир-оперу ас, а обычной оперы нет
Там возвращает путь последней запущенной оперы, запусти обычную и проверь, будет возвращать её путь.
А также в библиотеке есть функция для поиска папок оперы:

Код:
#include <Array.au3>
#include "Opera.au3"

$aOperaDirs = _OperaFindDir("C:", 5) ;Возвращает первые найденные 5 установочных путей Opera на диске C:
_ArrayDisplay($aOperaDirs)
 

k790

Новичок
Сообщения
239
Репутация
1
CreatoR [?]
А также в библиотеке есть функция для поиска папок оперы:
Не вариант.
Я не знаю, на каком диске будет стоять опера у пользователя x будет стоять винда, надо что-то думать, надо знать, путь до оперы в документах и настройках
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
k790 [?]
Я не знаю, на каком диске будет стоять опера у пользователя x будет стоять винда
Функция ищет на всех дисках («-1» вместо «C:»).

надо знать, путь до оперы в документах и настройках
Каких документах, каких настройках?
 

k790

Новичок
Сообщения
239
Репутация
1
CreatoR [?]
Каких документах, каких настройках?
C:\Documents and Settings\Admin\Application Data\Opera\Opera
путь до папки, где есть пароли, сессии, экспресс-панель, поиск, история, настройки, закладки.
Вот как мне узнать эту папку, допустим можно через USERPROFILE, но а папка оперы? Или она и будет совпадать с названием папки в Programm Files?
 

ynbIpb

Скриптер
Сообщения
399
Репутация
110
k790, папки Opera\Opera\ всегда имеют такие имена.
MsgBox (0, "", @AppDataDir & "\Opera\Opera\")
или ещё папка (пример для Windows7)
MsgBox (0, "", @UserProfileDir & "\AppData\Local\Opera\Opera\")
 
Верх