Что нового

Использование AutoIt с FireFox 31.0

ini

Новичок
Сообщения
55
Репутация
0
Привутствую уважаемые знатоки, полазил денек по форуму, либо не нашел, либо руки еще не достаточно паралельны...
Имеется Firefox 31.0 portable необходима возможность получения ссылок, кнопок, ввода данных (в общем работа с html), как в библиотеке IE.au3, FF.au3.
Пробовал воспользоваться FF.au3 ничего не вышло:( MozRepl для данной версии ФФ отсутствует, подскажите есть ли выход из этой ситуации? или AutoIt ограничен количеством браузеров определенной версии с которыми он может работать?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Re: FireFox 31.0

ini,
Предупреждение За нарушение правил форума (пункт Б.5):
Имя темы должно нести смысловую нагрузку (отражать суть вопроса/проблемы)
Правильно сформулированное название темы привлекает больше внимания, и шансы получить конкретный ответ увеличиваются.


Данные правила могут пополняться локальными правилами раздела.
Как правильно называть темы

"FireFox 31.0" - это неприемлемое название темы, переименуйте тему иначе она будет закрыта, а вам возможно будет выдан бан на несколько дней.

С уважением, ваш Глобальный модератор.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
ini [?]
подскажите есть ли выход из этой ситуации?
Да, взять ситуацию в свои руки, и написать свой MozRepl для данной версии :smile:.
Если серьёзно, то под Windows самое хорошее решение, это использовать Internet Explorer.
 
Автор
I

ini

Новичок
Сообщения
55
Репутация
0
в IE не хватает гибкости настроек браузера для работы с сайтам :(
А написать свой MozRepl точно не смогу :smile:
Так всё же, есть выход? :scratch:
 
Автор
I

ini

Новичок
Сообщения
55
Репутация
0
попробовал, но не кликает
Код:
#include "UIAutomate.au3"
If ProcessExists("firefox.exe") Then
   ProcessClose("firefox.exe")
EndIf
Sleep(1000)

Run("E:\Mozilla Firefox\firefox.exe")
While 1
If WinExists("Регистрация", "") Then
   ExitLoop
Else
If WinExists("Проблема при загрузке страницы", "") Then
   MsgBox(48, "Oops!", "Не загрузилась, вырубаю скрипт!")
   Exit
EndIf
EndIf
WEnd
Sleep(4000)
$oParent = _UIA_GetElementFromHandle("Регистрация", "")
$oElement = _UIA_GetControlTypeElement($oParent, 0xC355, "Пройти авторизацию")
_UIA_ElementDoDefaulAction($oElement)


0xC355 взял из Inspect - ControlType: UIA_HyperlinkControlTypeId (0xC355), Name "Пройти авторизацию"
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
ini [?]
Во-первых, функция _UIA_GetElementFromHandle() работает с идентификатором окна, т.е. так
Код:
$oParent = _UIA_GetElementFromHandle(WinGetHandle("Регистрация", ""))

Во-вторых, при запуске из SciTE ваш скрипт выдаёт ошибку
Код:
error: _UIA_GetElementFromHandle() called with wrong number of args.
В-третьих, если вы запускаете не из SciTE, то эта ошибка тоже появляется во всплывающем окне. Раз вы ошибку не видите (как я понимаю), значит ваш скрипт из цикла не выходит. А это значит, что окна "Регистрация" не существует.

Ссылку на сайт, где появляется окно "Регистрация", можете показать?
 
Автор
I

ini

Новичок
Сообщения
55
Репутация
0
u-masters.ru/rega.php
Проверяю цикл, все он находит и выходит, так же попробовал без цикла с вашей поправкой, всё равно мочлок :scratch:
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
ini
Переход по ссылке не приводит к появлению окна "Регистрация" (во всяком случае у меня на Portable 32.0.3). Открывается страница с текстом "Регистрация нового пользователя" и ссылкой "Пройти авторизацию". Нажимается ссылка так
Код:
#include "UIAutomate.au3"
; режим поиска окна по части заголовка
Opt("WinTitleMatchMode", 2)
; дескриптор окна Firefox
$hWnd = WinGetHandle("- Mozilla Firefox")
; объект - окно Firefox
$oParent = _UIA_GetElementFromHandle($hWnd)
; объект - ссылка "Пройти авторизацию"
$oElement = _UIA_GetControlTypeElement($oParent, 0xC355, "Пройти авторизацию")
; переход по ссылке
_UIA_ElementDoDefaulAction($oElement)
 
Автор
I

ini

Новичок
Сообщения
55
Репутация
0
добавил
Код:
Opt("WinTitleMatchMode", 2)

Всё заработало, спасибо, буду дальше разбираться :IL_AutoIt_1:
P.S. Если что, в личку можно стукнуть с вопросом?
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
ini [?]
в личку можно стукнуть с вопросом
Можно. Но, всё-таки, вопросы лучше обсуждать здесь, т.к. проблема работы с Firefox возникает не только у вас. Почему бы другим участникам форума не воспользоваться вашим опытом?
 
Автор
I

ini

Новичок
Сообщения
55
Репутация
0
OffTopic:
Хорошо, я бы сказал, с вашей библиотекой вопросы можно решать с любым браузером :ok:
 
Автор
I

ini

Новичок
Сообщения
55
Репутация
0
Столкнулся с еще одной проблемкой, можно как то кликнуть по вот такому рисунку, таковых на страничке 5
Код:
How found:	Mouse move (772,309)
	hwnd=0x00100C74 32bit class="MozillaWindowClass" style=0x17CF0000 ex=0x100
BoundingRectangle:	{l:592 t:221 r:992 b:407}
ProcessId:	5012
ControlType:	UIA_ImageControlTypeId (0xC356)
LocalizedControlType:	"рисунок"
Name:	""
AccessKey:	""
HasKeyboardFocus:	false
IsKeyboardFocusable:	false
IsEnabled:	true
HelpText:	""
IsPassword:	false
IsOffscreen:	false
ProviderDescription:	"[pid:5012,hwnd:0x0 Main(parent link):Microsoft: MSAA Proxy (unmanaged:uiautomationcore.dll)]"
Value.IsReadOnly:	false
Value.Value:	"http://u-masters.ru/rega.php?r=sashkaka"
LegacyIAccessible.ChildId:	0
LegacyIAccessible.DefaultAction:	"jump"
LegacyIAccessible.Description:	""
LegacyIAccessible.Help:	""
LegacyIAccessible.KeyboardShortcut:	""
LegacyIAccessible.Name:	""
LegacyIAccessible.Role:	графика (0x28)
LegacyIAccessible.State:	связанное (0x400000)
LegacyIAccessible.Value:	"http://u-masters.ru/rega.php?r=sashkaka"
IsDockPatternAvailable:	false
IsExpandCollapsePatternAvailable:	false
IsGridItemPatternAvailable:	false
IsGridPatternAvailable:	false
IsInvokePatternAvailable:	true
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:	"" гиперссылка
	"" 
	"http://u-masters.ru/rega.php?r=sashkaka" документ
	"" 
	"" 
	"" 
	"http://u-masters.ru/rega.php?r=sashkaka - Mozilla Firefox" окно
	"Рабочий стол" панель
	[ No Parent ]
Вот ссылка http://99link.ru/36274, кликнуть надо по большой зелёной стрелке
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
ini [?]
кликнуть по вот такому рисунку
Попробуйте так
Код:
$oImages = _UIA_FindAllElements($oParent, $UIA_ControlTypePropertyId, $UIA_ImageControlTypeId)
For $i = 1 To $oImages[0]
  If _UIA_ElementGetPropertyValue($oImages[$i], "ValueValue") = "http://u-masters.ru/rega.php?r=sashkaka" Then _UIA_ElementDoDefaulAction($oImages[$i])
Next
 
Автор
I

ini

Новичок
Сообщения
55
Репутация
0
Извиняюсь, не успел дописать:
Вот ссылка http://99link.ru/36274, кликнуть надо по большой зелёной стрелке
ValueValue будет меняться постоянно, но в ней постоянно будет ".php?r="
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
ini [?]
Вероятно, чтобы увидеть стрелку по ссылке, нужна регистрация, которой у меня нет.

в ней постоянно будет ".php?r="
А в других элементах такого не будет? Если да, то можно попробовать так
Код:
For $i = 1 To $oImages[0]
  If StringInStr(_UIA_ElementGetPropertyValue($oImages[$i], "ValueValue"), ".php?r=") Then _UIA_ElementDoDefaulAction($oImages[$i])
Next
или так (без поиска всех картинок)
Код:
$oGreenArrow = _UIA_GetControlTypeElement($oParent, "UIA_ImageControlTypeId", ".php?r=", "ValueValue", True)
_UIA_ElementDoDefaulAction($oGreenArrow)
 
Автор
I

ini

Новичок
Сообщения
55
Репутация
0
или так (без поиска всех картинок)
Код:
$oGreenArrow = _UIA_GetControlTypeElement($oParent, "UIA_ImageControlTypeId", ".php?r=", "ValueValue", True)
_UIA_ElementDoDefaulAction($oGreenArrow)
Вот так идеально :thumbs_up:
InnI Низкий поклон за помощь и оперативность :smile:


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

никак не сооброжу как сделать проверку загрузки страницы, просто иногда 400 ошибка выскакивает
пробую вот так:
Код:
While 1
$oElement = _UIA_GetControlTypeElement($oParent, "UIA_EditControlTypeId", "Нажмите на стрелку чтобы пропустить рекламу и перейти на")
If Not @error Then
   ExitLoop
   EndIf
Sleep(4000)
Send("{F5}")
WEnd

Даже если текст есть постоянно обновляет сраницу
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
ini
Фраза "Нажмите на стрелку чтобы пропустить рекламу и перейти на" - это текст свойства Name или Value.Value? Это полный текст или часть? Какую @error устанавливает функция?
 
Верх