Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » The requested action with this object has failed.:

Ответить
Настройки темы
The requested action with this object has failed.:

Пользователь


Сообщения: 80
Благодарности: 0

Профиль | Отправить PM | Цитировать


прога:

берет и экселя значение ссылки , переходит по ней, кликает кнопку "показать номер", копирует значение ссылки, вставляет в ексель, копирует поле с класом person-name , вставляет в ексель.
все просто, но !


PHP код: Выделить весь код

#include <IE.au3>


$oExcel ObjCreate('Excel.Application')
$oExcel.Visible True
$oExcel
.WorkBooks.Open(@ScriptDir '\links.xlsx')

While 
1
   
If WinExists("Internet Explorer"Then
      WinActivate
("Internet Explorer")
      
ControlClick("Internet Explorer""Закрыть программу""Button2")
   EndIf


For 
$i 55 to 1000 Step 1
ConsoleWrite 
$oExcel.Activesheet.Cells($i1).Value )
$link $oExcel.Activesheet.Cells($i1).Value
Sleep
(500)
$sUrl=$link
$oIE
=_IECreate($sUrl,0,0,1,0)
Sleep(2000)
$oLinks=_IETagNameGetCollection($oIE'a')




For 
$oTextArea In $oLinks

    
If StringInStr(_IEPropertyGet($oTextArea'outerhtml'), 'Показать номер'Then
        _IEAction
($oTextArea'click')

         
Sleep(4000)

         
$Var=$oTextArea.href


         $oExcel
.Activesheet.Cells($i,2).Value=$Var

          ExitLoop
              
EndIf
 
Next


$tags 
$oIE.document.GetElementsByTagName("div")
Sleep(2000)
For 
$tag in $tags

       $class_value 
$tag.className

    
If $class_value "person-name" Then
         Sleep
(2000)
        
$oExcel.Activesheet.Cells($i,3).Value=_IEPropertyGet($tag'innertext')
        
ExitLoop

    
EndIf
Next

_IEQuit
($oIE)

Next
Wend 



иногда выпадает ошибка
The requested action with this object has failed.:
$tags = $oIE.document.GetElementsByTagName("div")
$tags = $oIE.document^ ERROR
>Exit code: 1 Time: 180.9

и не понятна причина. уже голову сломал

Отправлено: 21:21, 03-11-2015

 

Аватара для Mike909

Новый участник


Сообщения: 38
Благодарности: 14

Профиль | Отправить PM | Цитировать


Цитата:
что-то все же с $oExcel.Activesheet.Cells($i, 1).Value. может переполняется какая-то память ?
у меня подобные ошибки были только когда я во время выполнения скрипта закрываю excel ручками.
Соответственно можно поставить дополнительно перед записью в ячейку проверку If not IsObj($oExcel) Then ...

Вообще перед запуском скрипта нужно проверить чтобы процессы excel.exe и iexplore.exe были закрыты, снять их в диспетчере задач. Тогда ошибок не должно быть никаких.

PS:
еще в начале главного цикла все таки нужен таймаут )) , сайт может блокирнуть временно по IP если слишком часто идут запросы:
PHP код: Выделить весь код

For $i 1 to 100 Step 1
    Sleep
(1000


Отправлено: 10:15, 05-11-2015 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Mike909

Новый участник


Сообщения: 38
Благодарности: 14

Профиль | Отправить PM | Цитировать


Окончательный вариант скрипта:

Скрытый текст
PHP код: Выделить весь код

#include <IE.au3>

Local $oIE$oLinks$tags$boolIsRealPage

_IEErrorNotify
(False)

;
Удаление кэша IE
RunWait
(@SystemDir '\RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 8''', @SW_HIDE

Открываем IE
My_New_IE
()    

;
Создаем Excel
Local $oExcel 
ObjGet("""Excel.Application")
If 
not IsObj($oExcelThen
      $oExcel 
ObjCreate('Excel.Application')
EndIf

If 
IsObj($oExcelThen

$oExcel
.Visible True
$oExcel
.WorkBooks.Open(@ScriptDir '\links.xlsx')
    
    For 
$i 1 to 250 Step 1
        Sleep
(1000)
            
        If 
not IsObj($oExcelThen
              ConsoleWrite 
('Excel not found')
              
ExitLoop
        
EndIf
        
        
$boolIsRealPage False
        $link 
$oExcel.Activesheet.Cells($i1).Value        
        ConsoleWrite 
$i ' ' $link & @LF)
        
_IENavigate($oIE$link0)       ; тут не ждем пока загрузится
        _IELoadWait
($oIE5000 15000)      ;  а тут ждем максимум 15 сек
            
if @error Then  2 попытка
                ConsoleWrite 
('2 try' & @LF)    
                
My_New_IE()            
                
_IENavigate($oIE$link0)       ; тут не ждем пока загрузится
                _IELoadWait
($oIE5000 15000)      ;  а тут ждем максимум 15 сек
            
EndIf
        if 
not @error Then
                ConsoleWrite 
(' open url ')    
                
$oLinks=_IETagNameGetCollection($oIE'a')    
                
ConsoleWrite (', get collecion a ' & @LF)    
                    
                if 
IsObj($oLinksThen
                    ConsoleWrite 
(' links=' $oLinks.Length ' ')
                    
Sleep(200)
                    For 
$oTextArea In $oLinks
                            
                        
If StringInStr(_IEPropertyGet($oTextArea'outerhtml'), 'Показать номер'Then
                          
                             _IEAction
($oTextArea'click')
                            
                             
Sleep(500)
                            
                             
$oExcel.Activesheet.Cells($i,2).Value=$oTextArea.href
                             $boolIsRealPage 
True
                             ExitLoop
                    
                        
EndIf
                    
                    
Next
                
Else
                   
ConsoleWrite ('links no obj' & @LF)            
                EndIf
            
                if 
$boolIsRealPage Then
                    $tags 
$oIE.document.GetElementsByTagName("div")        
                    if  
IsObj($tagsThen
                        ConsoleWrite 
('tags=' $tags.Length & @LF)
                        
Sleep(200)
                        For 
$tag in $tags
                           
                            $class_value 
$tag.className
                    
                            
If $class_value "person-name" Then
                        
                                $oExcel
.Activesheet.Cells($i,3).Value=_IEPropertyGet($tag'innertext')        
                                
ExitLoop
                    
                            
EndIf
                        
                        
Next
                    
Else
                       
ConsoleWrite ('tags no obj' & @LF)
                    EndIf
                Else
                    
ConsoleWrite ('Bad page - no tel.' & @LF)
                EndIf
                
           Else
                ; 
в случае ошибки IE переоткрываем 
                ConsoleWrite 
('New IE content' & @LF)    
                
My_New_IE()    

            
           EndIf
    
Next
    
Else

 
ConsoleWrite ("Excel is running." & @LF)
 
EndIf
_IEQuit($oIE)

ConsoleWrite ("Exit au3." & @LF)


;----------------------------------------
Func My_New_IE()

   If  
IsObj($oIEThen
       _IEQuit
($oIE)
   EndIf   
   
$oIE=_IECreate("about:blank",1,0,1)    
        
EndFunc 



Убрал постоянное открытие закрытие IE, заменил на открытие ссылки в том же окне, добавил переоткрытие в случае ошибки/зависона.
Таймауты можно наверное переделать, но это уже не суть.

ЗЫ: Вообще IE неуклюжий монстр..

Последний раз редактировалось Mike909, 05-11-2015 в 13:07.

Это сообщение посчитали полезным следующие участники:

Отправлено: 11:11, 05-11-2015 | #12


Аватара для Mike909

Новый участник


Сообщения: 38
Благодарности: 14

Профиль | Отправить PM | Цитировать


подправил скрипт выше.

Отправлено: 13:05, 05-11-2015 | #13


Пользователь


Сообщения: 80
Благодарности: 0

Профиль | Отправить PM | Цитировать


нды. видимо проблему у меня.
The requested action with this object has failed.:
$tags = $oIE.document.GetElementsByTagName("div")
$tags = $oIE.document^ ERROR
а какая у вас ОС на компьютере и какой Internet Explorer можно поинтересоваться ?

Отправлено: 20:17, 05-11-2015 | #14


Аватара для Mike909

Новый участник


Сообщения: 38
Благодарности: 14

Профиль | Отправить PM | Цитировать


Win 10 (10576) 32x, IE 11
у Вас ошибки все связаны с отсутствием объекта, в данном случае $oIE, может он слетает? Могу посоветовать одновременно с выполнением скрипта просмотреть в диспетчере задач поведение IE.
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:29, 05-11-2015 | #15


Пользователь


Сообщения: 80
Благодарности: 0

Профиль | Отправить PM | Цитировать


да. Нужно разобраться с поведением IE.
Спасибо за вашу помощь , доберусь до этой проблемы после выходных. Сюда отпишусь.

Отправлено: 07:52, 06-11-2015 | #16


Пользователь


Сообщения: 80
Благодарности: 0

Профиль | Отправить PM | Цитировать


Все работает... правда у меня тоже стоит вин 10 32х, но все работает )
Думаю проблема была в разрядности IE. он похоже путался когда какой запускать.
спасибо за помощь!

Отправлено: 12:18, 09-11-2015 | #17



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » The requested action with this object has failed.:

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Установка - this application has requested the runtime to terminate it in unusual way ElmandeRRR Microsoft Windows 7 5 04-04-2010 22:10
[решено] Overclocking failed or overvoltage failed при загрузке kos82 Непонятные проблемы с Железом 10 21-09-2009 17:54
[решено] object has failed при отправке на e-mail morgan1991 AutoIt 2 09-04-2009 14:33
V. 5.5/2000/2003 - [решено] Failed to grant permission for DOMAIN\user on this object... solon Microsoft Exchange Server 7 26-11-2008 07:52
ERROR The requested URL could not be retrieved Danieeelll Microsoft Windows NT/2000/2003 7 28-02-2004 16:53




 
Переход