Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Аватара для 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