Что нового

Как поместить указатель мыши на ссылку в FireFox?

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
InnI, вот что происходит, когда пытаешься дать человеку такое решение, до понимания которого, ему как до Луны. Тема растянулась уже на 40 постов. Толи еще будет. :smile:
 
Автор
bescom

bescom

Новичок
Сообщения
61
Репутация
0
Yashied сказал(а):
InnI, вот что происходит, когда пытаешься дать человеку такое решение, до понимания которого, ему как до Луны. Тема растянулась уже на 40 постов. Толи еще будет. :smile:
Нет, вот что происходит, когда решение работает не везде одинаково, но новичок - он же новичок, ему необязательно верить.
Кстати, наверняка Вы разбираетесь во многих сферах хуже меня, но я не пытаюсь каким-то образом сказать, что Вам до моих знаний, как до Луны.
И если не хотите помочь, то очень прошу, хотя бы не мешайте. От того, что удастся найти решение, выиграют и те, кто впоследствии будет читать тему.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
bescom, я не хочу вас в чем-то переубеждать или что-то навязывать. Но послушайте меня, пожалуйста, очень внимательно. В программировании в большинстве случаев нет универсальных решений. И если вы планируете и дальше заниматься этим делом, то просто обязаны научиться отлаживать код, а не просить это сделать за вас. InnI предоставил вам решение, и оно работает, т.к. он никогда бы не выложил непроверенный код (факт). Если предоставленный код не работает в вашем окружении, то это значит проблемы на вашей стороне. Для этого нужно более детально углубиться в задачу и попробовать отладить скрипт, благо все UDF имеют открытый исходный код.

bescom сказал(а):
...но новичок - он же новичок, ему необязательно верить.
Что за обидки? Здесь дело не в вере, а в том, что профессионал, в данном случае InnI, зачастую сразу может сказать кто и где виноват, и на чьей стороне возникают те или иные проблемы. Поверьте, это так в любой сфере деятельности.

bescom сказал(а):
Кстати, наверняка Вы разбираетесь во многих сферах хуже меня, но я не пытаюсь каким-то образом сказать, что Вам до моих знаний, как до Луны.
Я с этим даже и не спорю, но не забывайте, что мы находимся на тематическом форуме посвященному AutoIt, а не тем сферам, где вы хорошо разбираетесь.

bescom сказал(а):
И если не хотите помочь, то очень прошу, хотя бы не мешайте.
Я очень хочу помочь (по-своему :smile:), но пока воздержусь.

bescom сказал(а):
От того, что удастся найти решение, выиграют и те, кто впоследствии будет читать тему.
Меня больше волнует не решение, а возможность впоследствии найти это самое решение, читай тему. На данный момент ситуация такая, что посты даже двухлетней давности найти на форуме становится проблемой. Ну а самое смешное, что если у кого-то и возникнет похожая задачка, то в 99% случаев он не станет вкуривать все эти 40 несвязанных постов (факт). Кстати, отсюда и возникает постоянное дублирование тем.
 

InnI

AutoIT Гуру
Сообщения
4,951
Репутация
1,446
bescom
Меня терзают смутные сомнения... А на машину с ХР вы предварительно API UIAutomation установили? Утилита Inspect на машине с ХР запускается?
Вот выдержка из описания той темы, где вы скачивали UDF [box]Для получения информации об элементе потребуется утилита Inspect. Если данная утилита при запуске сообщает об ошибке, значит на компьютере не установлен API UIAutomation. На Windows 7 и выше данный API предустановлен, на Vista и XP нужно устанавливать отдельно отсюда.[/box]

И ещё. Запускайте скрипт прямо из SciTE (F5). Тогда в консоль SciTE будут выводиться ошибки выполнения функций с префиксом "!> _UIA_". Эти сообщения могут дать ключ к разгадке вашей проблемы. Также попробуйте запустить скрипт с правами администратора.
 
Автор
bescom

bescom

Новичок
Сообщения
61
Репутация
0
InnI [?]
на машину с ХР вы предварительно API UIAutomation установили? Утилита Inspect на машине с ХР запускается?
Да, установил. Да, Inspect запускается.


Запускайте скрипт прямо из SciTE
Вот репорт из отладчика:
Код:
>"C:\Program Files\AutoIt3\SciTE\..\autoit3.exe" /ErrorStdOut "C:\111\hod_0.01\hod_0.01-8.au3"    
_FFConnect: OS:	WIN_XP WIN32_NT 2600 Service Pack 3
_FFConnect: AutoIt:	3.3.12.0
_FFConnect: FF.au3:	0.6.0.1b-10
_FFConnect: IP:	127.0.0.1
_FFConnect: Port:	4242
_FFConnect: Delay: 	2ms
_FFConnect: Socket: 	1368
_FFConnect: Browser:	Mozilla/5.0 (Windows NT 5.1; rv:38.0) Gecko/20100101 Firefox/38.0
__FFSendJavaScripts: Sending functions to FireFox .......... done
_FFOpenURL: http://bescomblog.com/?page_id=4089
__FFSend: try{window.content.top.document.location.href='http://bescomblog.com/?page_id=4089'}catch(e){'_FFCmd_Err';};
__FFRecv: http://bescomblog.com/?page_id=4089
_FFLoadWait: .................................................................. loaded in 23333ms
[object HTMLDocument] - {location: {...}, sm2movie: function() {...}, searchform: {...}, tpix_179357: {...}, location: {...}, getElementsByName: function() {...}, getItems: function() {...}, ...}
__FFSend: FFau3.WCD=window.content.top.document;
__FFRecv: [object HTMLDocument] - {location: {...}, sm2movie: function() {...}, searchform: {...}, tpix_179357: {...}, location: {...}, getElementsByName: function() {...}, getItems: function() {...}, ...}
[object HTMLDocument] - {location: {...}, sm2movie: function() {...}, searchform: {...}, tpix_179357: {...}, location: {...}, getElementsByName: function() {...}, getItems: function() {...}, ...}
__FFSend: repl.quit()
_FFDisConnect: disconnected
_FFConnect: OS:	WIN_XP WIN32_NT 2600 Service Pack 3
_FFConnect: AutoIt:	3.3.12.0
_FFConnect: FF.au3:	0.6.0.1b-10
_FFConnect: IP:	127.0.0.1
_FFConnect: Port:	4242
_FFConnect: Delay: 	2ms
_FFConnect: Socket: 	1368
_FFConnect: Browser:	Mozilla/5.0 (Windows NT 5.1; rv:38.0) Gecko/20100101 Firefox/38.0
__FFSendJavaScripts: Sending functions to FireFox .......... done
__FFSend: try{window.content.top.document.location.href}catch(e){'_FFCmd_Err';};
__FFRecv: http://bescomblog.com/?page_id=4089
!> _UIA_FindAllElementsEx : ошибка создания объекта массива
!> _UIA_FindAllElements : ошибка создания массива элементов (объектов)
!> _UIA_FindAllElementsEx : ошибка создания объекта массива
!> _UIA_FindAllElements : ошибка создания массива элементов (объектов)
!> _UIA_FindAllElementsEx : ошибка создания объекта массива
!> _UIA_FindAllElements : ошибка создания массива элементов (объектов)
!> _UIA_FindAllElementsEx : ошибка создания объекта массива
!> _UIA_FindAllElements : ошибка создания массива элементов (объектов)
!> _UIA_FindAllElementsEx : ошибка создания объекта массива
!> _UIA_FindAllElements : ошибка создания массива элементов (объектов)
!> _UIA_FindAllElementsEx : ошибка создания объекта массива
!> _UIA_FindAllElements : ошибка создания массива элементов (объектов)
!> _UIA_FindAllElementsEx : ошибка создания объекта массива
!> _UIA_FindAllElements : ошибка создания массива элементов (объектов)
>Exit code: 0    Time: 210.9

Ну и как иллюстрация, что я не сошел с ума, что проблема действительно существует, а данные для функции правильные. Берем и ставим _FFLinkClick вот так:
Код:
If Not IsArray($aAll) Then
			If $log = 1 Then
			   FileWriteLine(@ScriptDir&"\log.txt", "URL для клика не найден - "&$urlstr1) 			; Пишем в файл URL, который не найден
			   _FFLinkClick($urlstr1)
			   _FFLoadWait()
			EndIf
      Sleep(30)
      ExitLoop
    EndIf

И о чудо! Все ходит, как надо. А ведь страница та же, ссылка та же, только для имитации клика используется не библиотека InnI, а FF.au3
В общем, сижу, жду указивок, что и где еще проверить... Сам по-прежнему считаю, что библиотека в каких-то условиях работает некорректно...
 

InnI

AutoIT Гуру
Сообщения
4,951
Репутация
1,446
bescom
Все ходит, как надо.
Так что же вы ей не пользуетесь?

библиотека в каких-то условиях работает некорректно
UDF работает корректно - она правильно выводит сообщения об ошибках. А вот почему методы объекта UIAutomation так работают - это вопрос или к Microsoft или к разработчикам Firefox.

Сделал отладочный скрипт
Код:
#include "UIAutomate.au3"

Opt("WinTitleMatchMode", 2)

Global $aFind[] = ["http://bescomblog.com/?page_id=4089&replytocom=3824#respond", _
                   "http://bescomblog.com/?page_id=4089&cpage=1#comment-3742", _
                   "http://bescomblog.com/?p=4133"]

LogErr("-----------------------------", 0)

$hWnd = WinActivate("Mozilla Firefox")
If Not $hWnd Then LogErr("Окно Firefox не найдено", 1)

$oParent = _UIA_GetElementFromHandle($hWnd)
LogErr("_UIA_GetElementFromHandle : " & @error)
If Not IsObj($oParent) Then LogErr("Ошибка создания объекта по идентификатору окна", 1)

SearchObj($UIA_HyperlinkControlTypeId)
SearchObj($UIA_EditControlTypeId)

ShellExecute("LogErr.txt")

; --------------------------

Func LogErr($str, $exit = 0)
  FileWriteLine("LogErr.txt", $str)
  If $exit Then
    ShellExecute("LogErr.txt")
    Exit
  EndIf
EndFunc

Func SearchObj($iTypeID)
  LogErr(">>> Поиск : " & $iTypeID)
  $aObj = _UIA_FindAllElements($oParent, "ControlType", $iTypeID)
  LogErr("_UIA_FindAllElements : " & @error)
  If Not IsArray($aObj) Or Not $aObj[0] Then
    LogErr("Объекты не найдены на странице")
    Return
  EndIf
  LogErr("Всего найдено объектов : " & $aObj[0])

  For $i = 0 To UBound($aFind) - 1
    LogErr("--- $i = " & $i)
    $aAll = _UIA_FindElementsInArray($aObj, "Value.Value", $aFind[$i], True)
    LogErr("_UIA_FindElementsInArray : " & @error)
    If Not IsArray($aAll) Or Not $aAll[0] Then
      LogErr("Не найдено содержимое : " & $aFind[$i])
    Else
      LogErr("Найдено объектов : " & $aAll[0])
      For $j = 1 To $aAll[0]
        LogErr($j & ": Name : " & _UIA_ElementGetPropertyValue($aAll[$j], "Name"))
        LogErr($j & ": Value.Value : " & _UIA_ElementGetPropertyValue($aAll[$j], "Value.Value"))
      Next
    EndIf
  Next
EndFunc
Положите его в папку с UIAutomate.au3. Запустите одну копию Firefox с одной вкладкой, перейдите на страницу http://bescomblog.com/?page_id=4089, запустите скрипт, дождитесь завершения. В папке скрипта будет создан файл отчёта LogErr.txt. Попробуйте несколько запусков: с обычными настройками, с отключённым ShockWave плеером, с отключённым плагином для FF.au3 и т.д. (отчёт будет дополняться). Покажите содержимое отчёта.
 
Автор
bescom

bescom

Новичок
Сообщения
61
Репутация
0
InnI [?]
что же вы ей не пользуетесь?
1 - Мне нужна полная имитация клика мышью, 2 - скрипт, реализованный на Вашей библиотеке, кликает и по ссылкам, и по изображениям, причем можно делать рандомное "плавание" координат клика, а другие решения таких возможностей не дают.
вопрос или к Microsoft или к разработчикам Firefox
Вот видите, все-таки зря меня тут во враги записали. Начинаете верить, что ситуация может иметь место. Я Вам в любом случае бесконечно благодарен за помощь.

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

InnI

AutoIT Гуру
Сообщения
4,951
Репутация
1,446
Ещё один отладочный скрипт на чистом API. Тоже попробуйте
Код:
#include "UIAutomate.au3"

Opt("WinTitleMatchMode", 2)
Global $pParent, $pCondLink, $pCondValue, $pCondAND, $pUIElementArray, $iElements
LogErr("-----------------------------", 0)

$hWnd = WinActivate("Mozilla Firefox")
If Not $hWnd Then LogErr("Окно Firefox не найдено", 1)

$oUIAutomation = ObjCreateInterface($sCLSID_CUIAutomation, $sIID_IUIAutomation, $dtagIUIAutomation)
If Not IsObj($oUIAutomation) Then LogErr("Ошибка создания объекта UIAutomation", 1)

$ErrCode = $oUIAutomation.ElementFromHandle($hWnd, $pParent)
LogErr("ElementFromHandle ErrCode " & Hex($ErrCode))
$oParent = ObjCreateInterface($pParent, $sIID_IUIAutomationElement, $dtagIUIAutomationElement)
If Not IsObj($oParent) Then LogErr("Ошибка создания объекта по идентификатору окна", 1)

$ErrCode = $oUIAutomation.CreatePropertyCondition($UIA_ControlTypePropertyId, $UIA_HyperlinkControlTypeId, $pCondLink)
LogErr("CreatePropertyCondition (Link) ErrCode " & Hex($ErrCode))
If Not $pCondLink Then LogErr("Ошибка создания условия поиска ссылки", 1)

$ErrCode = $oParent.FindAll($TreeScope_Descendants, $pCondLink, $pUIElementArray)
LogErr("FindAll (Link) ErrCode " & Hex($ErrCode))
$oUIElementArray = ObjCreateInterface($pUIElementArray, $sIID_IUIAutomationElementArray, $dtagIUIAutomationElementArray)
If Not IsObj($oUIElementArray) Then LogErr("Ошибка создания объекта массива (Link)", 1)
$oUIElementArray.Length($iElements)
LogErr("Найдено ссылок : " & $iElements)

$ErrCode = $oUIAutomation.CreatePropertyCondition($UIA_ValueValuePropertyId, "http://bescomblog.com/?p=4133", $pCondValue)
LogErr("CreatePropertyCondition (Value) ErrCode " & Hex($ErrCode))
If Not $pCondValue Then LogErr("Ошибка создания условия поиска содержимого", 1)

$ErrCode = $oParent.FindAll($TreeScope_Descendants, $pCondValue, $pUIElementArray)
LogErr("FindAll (Value) ErrCode " & Hex($ErrCode))
$oUIElementArray = ObjCreateInterface($pUIElementArray, $sIID_IUIAutomationElementArray, $dtagIUIAutomationElementArray)
If Not IsObj($oUIElementArray) Then LogErr("Ошибка создания объекта массива (Value)", 1)
$oUIElementArray.Length($iElements)
LogErr("Найдено содержимого : " & $iElements)

$ErrCode = $oUIAutomation.CreateAndCondition($pCondLink, $pCondValue, $pCondAND)
LogErr("CreateAndCondition ErrCode " & Hex($ErrCode))
If Not $pCondAND Then LogErr("Ошибка создания логического условия", 1)

$ErrCode = $oParent.FindAll($TreeScope_Descendants, $pCondAND, $pUIElementArray)
LogErr("FindAll (AND) ErrCode " & Hex($ErrCode))
$oUIElementArray = ObjCreateInterface($pUIElementArray, $sIID_IUIAutomationElementArray, $dtagIUIAutomationElementArray)
If Not IsObj($oUIElementArray) Then LogErr("Ошибка создания объекта массива (AND)", 1)
$oUIElementArray.Length($iElements)
LogErr("Найдено ссылок с содержимым : " & $iElements)

ShellExecute("LogErr.txt")

; --------------------------

Func LogErr($str, $exit = 0)
  FileWriteLine("LogErr.txt", $str)
  If $exit Then
    ShellExecute("LogErr.txt")
    Exit
  EndIf
EndFunc
 
Автор
bescom

bescom

Новичок
Сообщения
61
Репутация
0
Запускал тесты со следующими условиями:

1. Включено все (Shockwave Player, MozRepl)
2. Выключен Shockwave Player
3. Выключен MozRepl

LogErr.txt - результат работы первого теста
LogErr2.txt - результат работы второго теста.

Результаты разложены по папкам, имена которых - версия Windows + версия Shockwave Player. Хочу обратить внимание, что виртуалки являются полными копиями друг друга, только в одной обновлен Shockwave Player.
 

Вложения

  • test.zip
    4.8 КБ · Просмотры: 5

InnI

AutoIT Гуру
Сообщения
4,951
Репутация
1,446
bescom
Ну, что я могу сказать? С таким я раньше не сталкивался, но и не исключал (т.к. ошибка отлавливается 8) ). По каким-то, неизвестным мне, причинам метод FindAll возвращает код ошибки 0x80004005. Естественно, никаких объектов он не находит. Что это за ошибка, мне узнать не удалось. Поэтому попробуем другой метод - FindFirst. Запустите этот скрипт на проблемной машине
Код:
#include "UIAutomate.au3"

Opt("WinTitleMatchMode", 2)
Global $pParent, $pCondLink, $pCondValue, $pCondAND, $pCondTrue, $pUIElement, $pUIElementArray, $iElements
LogErr("-----------------------------", 0)

$hWnd = WinActivate("Mozilla Firefox")
If Not $hWnd Then LogErr("Окно Firefox не найдено", 1)

$oUIAutomation = ObjCreateInterface($sCLSID_CUIAutomation, $sIID_IUIAutomation, $dtagIUIAutomation)
If Not IsObj($oUIAutomation) Then LogErr("Ошибка создания объекта UIAutomation", 1)

$ErrCode = $oUIAutomation.ElementFromHandle($hWnd, $pParent)
LogErr("ElementFromHandle ErrCode " & Hex($ErrCode))
$oParent = ObjCreateInterface($pParent, $sIID_IUIAutomationElement, $dtagIUIAutomationElement)
If Not IsObj($oParent) Then LogErr("Ошибка создания объекта по идентификатору окна", 1)

$ErrCode = $oUIAutomation.CreatePropertyCondition($UIA_ControlTypePropertyId, $UIA_HyperlinkControlTypeId, $pCondLink)
LogErr("CreatePropertyCondition (Link) ErrCode " & Hex($ErrCode))
If Not $pCondLink Then LogErr("Ошибка создания условия поиска ссылки", 1)

$ErrCode = $oParent.FindFirst($TreeScope_Descendants, $pCondLink, $pUIElement)
LogErr("FindFirst (Link) ErrCode " & Hex($ErrCode))
$oUIElement = ObjCreateInterface($pUIElement, $sIID_IUIAutomationElement, $dtagIUIAutomationElement)
If Not IsObj($oUIElement) Then LogErr("Ошибка создания объекта (Link)", 1)
LogErr("Ссылка найдена !")

$ErrCode = $oUIAutomation.CreatePropertyCondition($UIA_ValueValuePropertyId, "http://bescomblog.com/?p=4133", $pCondValue)
LogErr("CreatePropertyCondition (Value) ErrCode " & Hex($ErrCode))
If Not $pCondValue Then LogErr("Ошибка создания условия поиска содержимого", 1)

$ErrCode = $oParent.FindFirst($TreeScope_Descendants, $pCondValue, $pUIElement)
LogErr("FindFirst (Value) ErrCode " & Hex($ErrCode))
$oUIElement = ObjCreateInterface($pUIElement, $sIID_IUIAutomationElement, $dtagIUIAutomationElement)
If Not IsObj($oUIElement) Then LogErr("Ошибка создания объекта (Value)", 1)
LogErr("Содержимое найдено !")

$ErrCode = $oUIAutomation.CreateAndCondition($pCondLink, $pCondValue, $pCondAND)
LogErr("CreateAndCondition ErrCode " & Hex($ErrCode))
If Not $pCondAND Then LogErr("Ошибка создания логического условия", 1)

$ErrCode = $oParent.FindFirst($TreeScope_Descendants, $pCondAND, $pUIElement)
LogErr("FindFirst (AND) ErrCode " & Hex($ErrCode))
$oUIElement = ObjCreateInterface($pUIElement, $sIID_IUIAutomationElement, $dtagIUIAutomationElement)
If Not IsObj($oUIElement) Then LogErr("Ошибка создания объекта (AND)", 1)
LogErr("Ссылка с содержимым найдена !")

$ErrCode = $oUIAutomation.CreateTrueCondition($pCondTrue)
LogErr("CreateTrueCondition ErrCode " & Hex($ErrCode))
If Not $pCondTrue Then LogErr("Ошибка создания условия True", 1)

$ErrCode = $oParent.FindAll($TreeScope_Descendants, $pCondTrue, $pUIElementArray)
LogErr("FindAll (True) ErrCode " & Hex($ErrCode))
$oUIElementArray = ObjCreateInterface($pUIElementArray, $sIID_IUIAutomationElementArray, $dtagIUIAutomationElementArray)
If Not IsObj($oUIElementArray) Then LogErr("Ошибка создания объекта массива (True)", 1)
$oUIElementArray.Length($iElements)
LogErr("Всего найдено элементов : " & $iElements)

ShellExecute("LogErr.txt")

; --------------------------

Func LogErr($str, $exit = 0)
  FileWriteLine("LogErr.txt", $str)
  If $exit Then
    ShellExecute("LogErr.txt")
    Exit
  EndIf
EndFunc
 
Автор
bescom

bescom

Новичок
Сообщения
61
Репутация
0
Оттестил, ловите. И сразу скажу - если нужно будет еще что-то тестить, я готов.
 

Вложения

  • test2.zip
    611 байт · Просмотры: 6

InnI

AutoIT Гуру
Сообщения
4,951
Репутация
1,446
bescom
Тогда такой вариант. Но он будет работать только в случае, если ссылка находится на текущей вкладке и её содержимое полностью совпадает с искомой строкой
Код:
Func GoTarget()
  Opt("WinTitleMatchMode", 2)
  Do
    $oParent = _UIA_GetElementFromHandle(WinActivate("Mozilla Firefox"))
    Sleep(30)
  Until IsObj($oParent)
  While 1
    URLFromArray()
    $urlstr1 = FileReadLine(@ScriptDir & "\ok_links.txt", 1)
    $pCnd1 = _UIA_CreatePropertyCondition("ControlType", $UIA_HyperlinkControlTypeId)
    $pCnd2 = _UIA_CreatePropertyCondition("Value.Value", $urlstr1)
    $pCndA = _UIA_CreateLogicalCondition($pCnd1, "AND", $pCnd2)
    Local $pUIElement
    $oParent.FindFirst($TreeScope_Descendants, $pCndA, $pUIElement)
    $oLink = ObjCreateInterface($pUIElement, $sIID_IUIAutomationElement, $dtagIUIAutomationElement)
    If Not IsObj($oLink) Then
      Sleep(30)
      ContinueLoop
    EndIf
    _UIA_ElementSetFocus($oLink)
    If Not _UIA_ElementGetPropertyValue($oLink, "IsOffscreen") Then
      $aRect = _UIA_ElementGetBoundingRectangle($oLink)
      $x = Random(50, 1000)
      $y = Random(200, 700)
      MouseMove($x, $y, Random(5, 30))
      Sleep(200)
      MouseClick("left", ($aRect[0] + ($aRect[2] - $aRect[0]) / 2) + Random(-10, 10, 1), ($aRect[1] + ($aRect[3] - $aRect[1]) / 2) + Random(-1, 1, 1))
      _FFLoadWait()
      Return
    EndIf
  WEnd
EndFunc
 
Автор
bescom

bescom

Новичок
Сообщения
61
Репутация
0
Насчет одной вкладки - это-то как раз и нисколько не страшно, потому что у меня для работы с этим скриптом даже FF настроен на открытие в той же вкладке, даже если в коде проставлен атрибут _blank.
А вот про "будет работать только в случае, если ... её содержимое полностью совпадает с искомой строкой" - буду пробовать. Хотя полчасика погонял - на удивление, ходит исправно. Правда, у нас гроза начинается, вынужден отключиться. Завтра продолжу испытания.
 
Автор
bescom

bescom

Новичок
Сообщения
61
Репутация
0
InnI [?]
Тогда такой вариант. Но он будет работать только в случае, если ссылка находится на текущей вкладке и её содержимое полностью совпадает с искомой строкой
В общем, докладываюсь. Этот вариант работает исправно, но для сложных случаев не годится. Как оптимальный, я выбрал предыдущий вариант + если не срабатывает - дорабатывать с помощью _FFLinkClick. В принципе, на данный момент меня устраивает.

InnI, я Вам бескрайне благодарен - за помощь и терпение. Вы тратили на меня свое время и предложили не одно, а несколько решений. А это дорогого стоит. Говорю искренне "спасибо". :beer:
 

InnI

AutoIT Гуру
Сообщения
4,951
Репутация
1,446
bescom
для сложных случаев не годится
Я это знаю. Поэтому и сделал изначально функции _UIA_FindElementsInArray() и _UIA_GetControlTypeElement(), позволяющие находить элементы по частичному совпадению значения свойства. Для вашего "клинического" :smile: случая можно сделать обход всего дерева элементов через _UIA_ElementGetPreviousNext() с предварительным поиском дочерних элементов. Но, во-первых, это будет медленно, а, во-вторых, с рекурсиями я "не дружу".

Вам бы я посоветовал найти и попробовать версии плеера 15 и 16. Это поможет узнать на какой конкретно версии произошёл "сбой". Возможно, и такое случается часто, данная 17-я версия содержит ошибку, и очередное обновление её исправит. Ещё, возможно, что 17-я версия уже не поддерживает WinXP в полном объёме. Когда вы это выясните, то сможете давать рекомендации пользователям своей программы по поводу совместимости и необходимости обновлений.
 
Автор
bescom

bescom

Новичок
Сообщения
61
Репутация
0
"Когда вы это выясните, то сможете давать рекомендации пользователям своей программы по поводу совместимости и необходимости обновлений" - эхе-хе, если бы это были единственные рекомендации, которые придется давать пользователям... А как известно, перегружать пользователя рекомендациями - не очень правильный ход.

Я, кстати, искал и "костыльные" решения - передавать адрес ссылки в Selenium IDE, Auto Mouse Clicker, iMacros, а ими мож клики будут более стабильными. Так ничего у меня не получилось - даже возможностей таких не нашел. ;)
 
Верх