bescom
Новичок
- Сообщения
- 61
- Репутация
- 0
Преамбула: В одном из моих AutoIT скриптов FF ходит со страницы на страницу, переходя по ссылкам (по разным сайтам). Ходит, используя в качестве прокси сеть TOR.
Сама проблема: Видимо, некоторые сервера не всегда корректно передают данные, из-за чего иногда появляется следующее окошко с неопознанной ошибкой:
Попытки отучить браузер выводить это окно не увенчались успехом. Искал в about:config, чтобы выключить вывод ошибки - безуспешно. На Сёрче предположили, что это не браузер выводит сообщение, а JS выполняет <script>alert()</script>. На форуме поддержки пользователей Firefox вообще скромно промолчали.
Решил пойти другим путем: при возникновении этого окошка закрывать его, проверяя присутствие из скрипта, тем более что закрывается оно простым нажатием Enter, а браузер после закрытия нормально продолжает работу. Но и тут столкнулся с проблемами. Перечислю варианты, которые я перепробовал, по порядку:
1. Самый простой способ - проверить наличие окна с определенным текстом и отправить Enter.
Получается, но один раз из двадцати. Не пойдет. Кстати отмечу, что AutuIT Window Info это окно не видит.
2. Открываю утилиту Inspect и изучаю окно. Результат:
Вроде бы можно ухватить окошко по свойству Name с помощью библиотеки UIAutomate.au3. Пишу функцию:
Вопреки ожиданиям, окошко не отлавливается. Функция или срабатывает ложно, или не видит его.
3. Ну его нафиг, попробую, не умничая, проверить на наличие пикселей с определенными цветами. То есть, у окошка 6 цветов, и при наличии всех - отправлять Enter.
Фиг, не работает. Точнее, постоянные ложные срабатывания, когда нет вредного окошка.
4. Может, попробовать на наличие цвета затемнения?
Ничего подобного, функция не видит окно...
Как видите, я не лодырь, попробовал разные способы, но ни один из них не сработал...
Подскажите, друзья, как еще можно попробовать отловить это вредное окошко и закрыть его?
Сама проблема: Видимо, некоторые сервера не всегда корректно передают данные, из-за чего иногда появляется следующее окошко с неопознанной ошибкой:

Попытки отучить браузер выводить это окно не увенчались успехом. Искал в about:config, чтобы выключить вывод ошибки - безуспешно. На Сёрче предположили, что это не браузер выводит сообщение, а JS выполняет <script>alert()</script>. На форуме поддержки пользователей Firefox вообще скромно промолчали.
Решил пойти другим путем: при возникновении этого окошка закрывать его, проверяя присутствие из скрипта, тем более что закрывается оно простым нажатием Enter, а браузер после закрытия нормально продолжает работу. Но и тут столкнулся с проблемами. Перечислю варианты, которые я перепробовал, по порядку:
1. Самый простой способ - проверить наличие окна с определенным текстом и отправить Enter.
Код:
Func UE() ; Закрываем ошибку "Unexpected Error"
If WinExists("", "Unexpected Error") Then
WinActivate("Mozilla Firefox")
Send("{ENTER}")
EndIf
EndFunc
2. Открываю утилиту Inspect и изучаю окно. Результат:
How found: Mouse move (638,386)
hwnd=0x000505C8 32bit class="MozillaWindowClass" style=0x17CF0000 ex=0x100
BoundingRectangle: {l:598 t:382 r:683 b:396}
ProcessId: 3436
ControlType: UIA_EditControlTypeId (0xC354)
LocalizedControlType: "edit"
Name: "Unexpected Error"
AccessKey: ""
HasKeyboardFocus: false
IsKeyboardFocusable: false
IsEnabled: true
HelpText: ""
IsPassword: false
IsOffscreen: false
ProviderDescription: "[pid:3436,hwnd:0x0 Main(parent link):Microsoft: MSAA Proxy (unmanaged:uiautomationcore.dll)]"
Value.IsReadOnly: false
Value.Value: ""
LegacyIAccessible.ChildId: 0
LegacyIAccessible.DefaultAction: ""
LegacyIAccessible.Description: ""
LegacyIAccessible.Help: ""
LegacyIAccessible.KeyboardShortcut: ""
LegacyIAccessible.Name: "Unexpected Error"
LegacyIAccessible.Role: редактируемый текст (0x2A)
LegacyIAccessible.State: обычный (0x0)
LegacyIAccessible.Value: ""
IsDockPatternAvailable: false
IsExpandCollapsePatternAvailable: false
IsGridItemPatternAvailable: false
IsGridPatternAvailable: false
IsInvokePatternAvailable: false
IsLegacyIAccessiblePatternAvailable: true
IsMultipleViewPatternAvailable: false
IsRangeValuePatternAvailable: false
IsScrollPatternAvailable: false
IsScrollItemPatternAvailable: false
IsSelectionItemPatternAvailable: false
IsSelectionPatternAvailable: false
IsTablePatternAvailable: false
IsTableItemPatternAvailable: false
IsTextPatternAvailable: false
IsTogglePatternAvailable: false
IsTransformPatternAvailable: false
IsValuePatternAvailable: true
IsWindowPatternAvailable: false
IsItemContainerPatternAvailable: false
IsVirtualizedItemPatternAvailable: false
IsSynchronizedInputPatternAvailable: false
FirstChild: [null]
LastChild: [null]
Next: [null]
Previous: [null]
Other Props: Object has no additional properties
Children: Container has no children
Ancestors: "" text
""
""
""
"Программа Бродяга | - Mozilla Firefox" window
"Рабочий стол" pane
[ No Parent ]
hwnd=0x000505C8 32bit class="MozillaWindowClass" style=0x17CF0000 ex=0x100
BoundingRectangle: {l:598 t:382 r:683 b:396}
ProcessId: 3436
ControlType: UIA_EditControlTypeId (0xC354)
LocalizedControlType: "edit"
Name: "Unexpected Error"
AccessKey: ""
HasKeyboardFocus: false
IsKeyboardFocusable: false
IsEnabled: true
HelpText: ""
IsPassword: false
IsOffscreen: false
ProviderDescription: "[pid:3436,hwnd:0x0 Main(parent link):Microsoft: MSAA Proxy (unmanaged:uiautomationcore.dll)]"
Value.IsReadOnly: false
Value.Value: ""
LegacyIAccessible.ChildId: 0
LegacyIAccessible.DefaultAction: ""
LegacyIAccessible.Description: ""
LegacyIAccessible.Help: ""
LegacyIAccessible.KeyboardShortcut: ""
LegacyIAccessible.Name: "Unexpected Error"
LegacyIAccessible.Role: редактируемый текст (0x2A)
LegacyIAccessible.State: обычный (0x0)
LegacyIAccessible.Value: ""
IsDockPatternAvailable: false
IsExpandCollapsePatternAvailable: false
IsGridItemPatternAvailable: false
IsGridPatternAvailable: false
IsInvokePatternAvailable: false
IsLegacyIAccessiblePatternAvailable: true
IsMultipleViewPatternAvailable: false
IsRangeValuePatternAvailable: false
IsScrollPatternAvailable: false
IsScrollItemPatternAvailable: false
IsSelectionItemPatternAvailable: false
IsSelectionPatternAvailable: false
IsTablePatternAvailable: false
IsTableItemPatternAvailable: false
IsTextPatternAvailable: false
IsTogglePatternAvailable: false
IsTransformPatternAvailable: false
IsValuePatternAvailable: true
IsWindowPatternAvailable: false
IsItemContainerPatternAvailable: false
IsVirtualizedItemPatternAvailable: false
IsSynchronizedInputPatternAvailable: false
FirstChild: [null]
LastChild: [null]
Next: [null]
Previous: [null]
Other Props: Object has no additional properties
Children: Container has no children
Ancestors: "" text
""
""
""
"Программа Бродяга | - Mozilla Firefox" window
"Рабочий стол" pane
[ No Parent ]
Код:
#include "UIAutomate.au3"
Func UE()
Opt("WinTitleMatchMode", 2)
Do
$oParent = _UIA_GetElementFromHandle(WinActivate("Mozilla Firefox"))
Sleep(30)
Until IsObj($oParent)
While 1
$aAll = _UIA_FindAllElements($oParent, "Name", "Unexpected Error")
If Not IsArray($aAll) Then
Sleep(30)
ExitLoop
EndIf
WinActivate("Mozilla Firefox")
Send("{ENTER}")
ExitLoop
WEnd
EndFunc
3. Ну его нафиг, попробую, не умничая, проверить на наличие пикселей с определенными цветами. То есть, у окошка 6 цветов, и при наличии всех - отправлять Enter.
Код:
Func UE()
$pic=0
$color1="F2F2F2"
$color2="D4D0C8"
$color3="FFFFFF"
$color4="000000"
$color5="808080"
$color6="E6E6E6"
$x2=@DesktopWidth
$y2=@DesktopHeight
$var1=Pixelsearch(0,0,$x2,$y2, $color1,5, 2)
if not @error then
$pic=$pic+1
EndIf
$var2=Pixelsearch(0,0,$x2,$y2, $color2,5, 2)
if not @error then
$pic=$pic+1
EndIf
$var3=Pixelsearch(0,0,$x2,$y2, $color3,5, 2)
if not @error then
$pic=$pic+1
EndIf
$var4=Pixelsearch(0,0,$x2,$y2, $color4,5, 2)
if not @error then
$pic=$pic+1
EndIf
$var5=Pixelsearch(0,0,$x2,$y2, $color5,5, 2)
if not @error then
$pic=$pic+1
EndIf
$var6=Pixelsearch(0,0,$x2,$y2, $color6,5, 2)
if not @error then
$pic=$pic+1
EndIf
if $pic=6 then
WinActivate("Mozilla Firefox")
Send("{ENTER}")
EndIf
EndFunc
4. Может, попробовать на наличие цвета затемнения?
Код:
Func UE()
$pic=0
$color="949494"
$x2=@DesktopWidth
$y2=@DesktopHeight
$var7=Pixelsearch(0,0,$x2,$y2, $color,5)
if not @error then
WinActivate("Mozilla Firefox")
Send("{ENTER}")
EndIf
EndFunc
Как видите, я не лодырь, попробовал разные способы, но ни один из них не сработал...
Подскажите, друзья, как еще можно попробовать отловить это вредное окошко и закрыть его?