Trở về
Tham gia nhóm m Autoit đ đưc hưng dn và gii đáp trc tiếp : http://fb.com/groups/autoitscript
Tin tức công nghệ  -  Thủ thuật lập trình

Friday, September 27, 2013

Tự động hóa đăng nhập website với thư viện IE của Autoit


Toàn màn hìnhIn bài viết

Tự động hóa đăng nhập website với thư viện IE



Ở phần này mình sẽ hướng dẫn các bạn sử dụng Autoit để tự động hóa các thao tác đăng nhập vào một trang web và các tác vụ khác như tự động post bài , lấy nội dung trang , tự động submit một form ....

Thư viện này ứng dụng khá nhiều , có thể viết code get link , code get email , đăng nhập ... và tự động hóa tất cả các tác vụ trên nền web

Sau này mình sẽ giới thiệu một số thư viện khác như WinHTTP , TCP kết hợp cùng với IE để có thể sử dụng một cách linh hoạt các thao tác tự động hóa trên nền web ...


Trước khi bắt đầu , chúng ta cần điểm qua một số công cụ và yêu cầu cho phần này :
  • Code sử dụng trình duyệt IE để thao tác nên máy tính cần phải cài đặt IE (8.0) trở lên , điều này thì khá đơn giản vì trên win 7 hay win 8 đều đã tích hợp sẵn trình duyệt IE cho người dùng rồi.
  • Để có thể đơn giản hóa các thao tác khi code , chúng ta nên cài thêm trình duyệt FireFox để sử dụng các công cụ có sẵn của trình duyệt này.
  • Với IE ta có thể thực hiện mọi thao tác với một trang web nhưng đòi hỏi phải linh động , kiên nhẫn và tìm tòi thì mới có thể giải quyết mọi vấn đề khi thực hiện các tác vụ một cách tự động
Ở phần này mình sẽ hướng dẫn các bạn tự động đăng nhập vào Gmail và mở hòm mail cá nhân , sau đó mình sẽ cung cấp thêm một số code mẫu khác để các bạn tự nghiên cứu về UDF IE .

Tự động đăng nhập Gmail :

Bước 1: sử dụng trình duyệt Firefox để mở trang đăng nhập gmail : http://gmail.com

ở đây các bạn chú ý vào 1 form có 3 input , đó là form có id="gaia_loginform" ,  input email (hay "tên người dùng" có id="Email" và name="Email") , input password (hay "mật khẩu" có id="passwd" và name="passwd") và cuối cùng là input signIn (có id="signIn" , name ="signIn" và type="submit" )... các bạn sẽ thắc mắc tại sao mà mình có được những thông tin này phải không ? rất đơn giản chũng ta sử dụng công cụ Inspect Element có sẵn trong FF , chỉ cần chuột phải vào element cần lấy thông tin và html code sau đó click vào Inspect element ...

http://thebox.vn/Uploaded/huy/2012_10_17/Pic%201.png?maxwidth=461 
có đầy đủ những thông tin như trên ,ta chuyển sang bước 2...


Bước 2: Viết code đăng nhập Gmail

#include <IE.au3>

$email='email của bạn'
$pass='password của bạn'

$oIE=_IECreate('http://gmail.com') ; Khởi tạo Object IE và chuyển hướng đến trang đăng nhập Gmail
$oForm=_IEGetObjById($oIE,'gaia_loginform'); Lấy Object của form đăng nhập (form này ko có name ,nếu form có name thì sử dụng hàm _IEFormGetObjByName($oIE,"name))
$oEmail=_IEFormElementGetObjByName($oForm,'Email') ; Lấy Object của input email
_IEFormElementSetValue($oEmail,$email) ; Điền email vào khung nhập
$oPass=_IEFormElementGetObjByName($oForm,'passwd') ; Lấy Object của input password
_IEFormElementSetValue($oPass,$pass) ; Điền pass vào khung nhập
_IEFormSubmit($oForm) ;Submit form đăng nhập
_IELoadWait($oIE)

#cs
; Chú ý : đối với một số phiên bản IE thì sử dụng hàm _IEFormSubmit($oForm) sẽ báo lỗi , khắc phục bằng hàm thay thế dưới đây :
; Để submit form đăng nhập ta còn có thể làm cách khác , đó là click vào input submit , code như sau :
$oSubmit=_IEFormElementGetObjByName($oForm,'signIn')
_IEAction($oSubmit,"click")
#ce

Vậy là đã xong code đăng nhập Gmail , các bạn có thể phát triển thêm bằng cách sử dụng một số hàm khác trong thư viện IE như _IEBodyReadHTML (để đọc source code HTML của trang) , _IEBodyReadText (để đọc nội dung thuần text của trang) hay _IELickClickByText (Click vào một link trên trang web)  và một số hàm thao tác với chuỗi khác để tự viết một chương trình lấy mail trong hòm thư gmail ... cái này các bạn tự tìm hiểu và thực hành ^^

Một số Code mẫu với thư viện IE:

Xuất ra top kết quả tìm kiếm trên Google:

#include <Array.au3>
#include <IE.au3>

Local $aTitles[1][2], $oIE, $oForm, $oQuery, $oLinks, $iCount, $sLinkHTML, $sLinkText

$search = 'autoit'
$url = "http://www.google.com/search?hl=vi&amp;q=" &amp; $search
$oIE = _IECreate($url)
$oLinks = _IELinkGetCollection($oIE)

If IsObj($oLinks) Then
    $iCount = 0
    For $oLink In $oLinks
        $sLinkHREF = $oLink.href
        $sLinkText = _IEPropertyGet($oLink, "innertext")

        If Not StringInStr($sLinkHREF, "google") And Not StringInStr($sLinkHREF, "javascript") Then
            $iCount += 1
            ReDim $aTitles[$iCount][2]
            $aTitles[$iCount - 1][0] = $sLinkText
            $aTitles[$iCount - 1][1] = $sLinkHREF
        EndIf
    Next
EndIf
For $i = 1 To 2
    _ArrayDelete($aTitles, 0)
Next
_ArrayDisplay($aTitles)

Code xem giá vàng và tỷ giá lãi suất một số ngân hàng :


#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <IE.au3>

_IEErrorHandlerRegister ()
$oIE = _IECreateEmbedded ()


$Form1 = GUICreate("Banks Interest Rate ", 1250, 710, 1, 4)
GUISetBkColor(0x000000)
$GUIActiveX = GUICtrlCreateObj($oIE, 140,20, 1090, 664)
$Group1 = GUICtrlCreateGroup("", 8, 8, 121, 681)
$b = GUICtrlCreateButton("SJC", 32, 35, 75, 25, $WS_GROUP)
GUICtrlSetCursor (-1, 0)
$b3 = GUICtrlCreateButton("AcbBank", 32, 230, 75, 25, $WS_GROUP)
GUICtrlSetCursor (-1, 0)
$b1 = GUICtrlCreateButton("Phuongnam", 32, 100, 75, 25, $WS_GROUP)
GUICtrlSetCursor (-1, 0)
$b5 = GUICtrlCreateButton("Military", 32, 360, 75, 25, $WS_GROUP)
GUICtrlSetCursor (-1, 0)
$b6 = GUICtrlCreateButton("EximBank", 32, 425, 75, 25, $WS_GROUP)
GUICtrlSetCursor (-1, 0)
$b7 = GUICtrlCreateButton("Maritime", 32, 490, 75, 25, $WS_GROUP)
GUICtrlSetCursor (-1, 0)
$b2 = GUICtrlCreateButton("SeaBank", 32, 165, 75, 25, $WS_GROUP)
GUICtrlSetCursor (-1, 0)
$b4 = GUICtrlCreateButton("Donga Bank", 32, 295, 75, 25, $WS_GROUP)
GUICtrlSetCursor (-1, 0)
$b8 = GUICtrlCreateButton("VietcomBank", 32, 555, 75, 25, $WS_GROUP)
GUICtrlSetCursor (-1, 0)
$b9 = GUICtrlCreateButton("OceanBank", 32, 620, 75, 25, $WS_GROUP)
GUICtrlSetCursor (-1, 0)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group2 = GUICtrlCreateGroup("", 136, 8, 1100, 681)
GUICtrlCreateGroup("", -99, -99, 1, 1)

#EndRegion ### END Koda GUI section ###
GUISetState(@SW_SHOW)
GUISetState(@SW_DISABLE,$Form1)
$wait=_IENavigate ($oIE,'http://raito.comli.com')
 _IELoadWait($wait)
         GUISetState(@SW_ENABLE,$Form1)

While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
   case $b
       _IEAction ($oIE, "stop")
       GUISetState(@SW_DISABLE,$Form1)
      ; Beep(4000, 250)
    $wait=_IENavigate ($oIE, "http://sjc.com.vn/?n=0")
 _IELoadWait($wait)
         GUISetState(@SW_ENABLE,$Form1)

    case $b1
        _IEAction ($oIE, "stop")
        GUISetState(@SW_DISABLE,$Form1)
        ;Beep(4000, 250)
    $wait=_IENavigate ($oIE, "http://www.southernbank.com.vn/Interest.aspx?lang=vn")
     _IELoadWait($wait)
         GUISetState(@SW_ENABLE,$Form1)

     case $b2
    _IEAction ($oIE, "stop")
    GUISetState(@SW_DISABLE,$Form1)
    ;Beep(4000, 250)
    $wait=_IENavigate ($oIE, "http://www.seabank.com.vn/index.php?option=com_interest_rate&amp;task=listinterest")
_IELoadWait($wait)
           GUISetState(@SW_ENABLE,$Form1)

    case $b3
        _IEAction ($oIE, "stop")
        GUISetState(@SW_DISABLE,$Form1)
        ;Beep(4000, 250)
    $wait=_IENavigate ($oIE, "http://www.acb.com.vn/laisuat/laisuat_khcn.htm")
_IELoadWait($wait)
GUISetState(@SW_ENABLE,$Form1)

    case $b4
        _IEAction ($oIE, "stop")
        GUISetState(@SW_DISABLE,$Form1)
        ;Beep(4000, 250)
    $wait=_IENavigate ($oIE, "http://www.dongabank.com.vn/interest/54/lai-suat-tiet-kiem-vnd")
_IELoadWait($wait)
GUISetState(@SW_ENABLE,$Form1)

    case $b5
    _IEAction ($oIE, "stop")
    GUISetState(@SW_DISABLE,$Form1)
    ;Beep(4000, 250)
    $wait=_IENavigate ($oIE, "http://www.militarybank.com.vn/congcu/bieulaisuat.asp")
_IELoadWait($wait)
GUISetState(@SW_ENABLE,$Form1)

    case $b6
        _IEAction ($oIE, "stop")
        GUISetState(@SW_DISABLE,$Form1)
        ;Beep(4000, 250)
    $wait=_IENavigate ($oIE, "http://www.eximbank.com.vn/vn/cn_tietkiem_vnd.aspx")
_IELoadWait($wait)
GUISetState(@SW_ENABLE,$Form1)

    case $b7
        _IEAction ($oIE, "stop")
        GUISetState(@SW_DISABLE,$Form1)
        ;Beep(4000, 250)
    $wait=_IENavigate ($oIE, "http://www.msb.com.vn/d-lai-suat/0tiet-kiem-lai-suat-cao-nhat")
_IELoadWait($wait)
GUISetState(@SW_ENABLE,$Form1)

    case $b8
        _IEAction ($oIE, "stop")
        GUISetState(@SW_DISABLE,$Form1)
    ;    Beep(4000, 250)
    $wait=_IENavigate ($oIE, "http://www.vietcombank.com.vn/InterestRates/")
_IELoadWait($wait)
GUISetState(@SW_ENABLE,$Form1)

    case $b9
        _IEAction ($oIE, "stop")
        GUISetState(@SW_DISABLE,$Form1)
        ;Beep(4000, 250)
    $wait=_IENavigate ($oIE, "http://oceanbank.vn/Lai-Suat/index.html?ID=1")
_IELoadWait($wait)
GUISetState(@SW_ENABLE,$Form1)


EndSwitch
WEnd


Một số code khác , sau này mình sẽ cập nhật sau ...

Bài này kết thúc ở đây ^^!