1. Tải bản cài đặt AutoIT mới nhất

    Chào Khách. Nếu bạn mới tham gia và chưa cài đặt AutoIT.
    Vui lòng vào topic trên để tải bản AutoIT mới nhất nhé
    Dismiss Notice
  2. Quy định và nội quy

    Chào Khách. Vui lòng đọc kỹ nội quy và quy định của diễn đàn
    Để tránh bị ban một cách đáng tiếc nhé!
    Dismiss Notice
  3. Hướng dẫn chèn mã AutoIT trong diễn đàn

    Chào Khách. Vui lòng xem qua bài viết này
    Để biết cách chèn mã AutoIT trong diễn đàn bạn nhé :)
    Dismiss Notice

Hướng dẫn Kết hợp Autoit và Javascript để tương tác với website

Thảo luận trong 'Hướng dẫn - Bài tập nâng cao' bắt đầu bởi Đức Huy, 18/8/16.

  1. Đức Huy

    Đức Huy Thành viên mới
    • 3/6

    Tham gia ngày:
    3/3/16
    Bài viết:
    3
    Đã được thích:
    6
    A/ Lời nói đầu
    - Mình cũng mới học cả AutotIT lẫn Javascript (js) cách đây không lâu, nhất là js.
    - Tại mình thấy mấy cái hàm trong Autoit khó dùng và không được đầy đủ lắm nên mới dùng js.
    - Quan điểm của mình là Chia sẻ để học hỏi,
    - Trong bài này mình sẽ làm trên IE. Còn FF và Chrome cũng gần tương tự =))
    - Yêu cầu: biết AutoIT, IE.au3, Js và DevTool

    B/ Chiến luôn thôi nào
    1. Tất cả các mã js cần được gắn sau IE object trả về từ cái _IECreate
    Ví dụ trong mã js sau
    Mã (Javascript):
    document.write('Hello world')
    thì trong AutoIT là

    Mã (AutoIt):
    #include <IE.au3>

    $oIE = _IECreate()
    $oIE.document.write('Hello world')
    Sleep(5000)
    _IEQuit($oIE)
    2. Các đoạn mã js trả về giá trị có trong AutoIT
    - Chú ý là một số mã trả về giá trị là Object như querySeletor querySeletorAll
    - Từ IE9 thì 'querySeletorAll' mới thực hiện được
    - Dùng 'querySelector' thường sẽ trả về giá trị đầu tiên mà nó tìm thấy
    - Ví dụ với getElementById:
    Mã (AutoIt):
    #include <IE.au3>

    $link = 'https://www.youtube.com/watch?v=_ovdm2yX4MA'
    $oIE = _IECreate($link)
    $song = $oIE.document.getElementById('eow-title').innerHTML
    MsgBox(0,'Song',$song)

    _IEQuit($oIE)
    3. Mã js đặt giá trị và thực hiện một hành động
    Mã (AutoIt):
    #include <IE.au3>

    $link = 'https://www.youtube.com/'
    $oIE = _IECreate($link)

    ;set value to input id="masthead-search-term"
    ; querySelector('#id') = getElementById('id')
    $oIE.document.querySelector('#masthead-search-term').value = 'Hey Brother'
    $oIE.document.getElementById('search-btn').click() ;click button search

    Sleep(1000)
    _IELoadWait($oIE)
    $oIE.document.querySelector('a[href="/watch?v=6Cp6mKbRTQY"]').click() ;click anchor with href="/watch?v=6Cp6mKbRTQY"

    Sleep(2000)
    _IELoadWait($oIE)
    $song = $oIE.document.getElementById('eow-title').innerHTML
    MsgBox(0,0,$song)

    _IEQuit($oIE)
    4. Mã js trả lại 1 giá trị đặc biệt (Object)
    - Tuỳ theo giá trị trả lại mà có những thao tác thích hợp
    - Mình ví dụ với querySelectorAll trả và NodeList
    Mã (AutoIt):
    #include <IE.au3>

    $link = 'http://imgur.com//'
    $oIE = _IECreate($link)

    $list = $oIE.document.querySelectorAll("a.image-list-link") ; get NodeList

    For $i in $List    ;$i is a element
        If $i.href > "" Then
            ConsoleWrite($i.href & @CRLF)
        EndIf  
    Next

    C/ Kết
    - Tạm thời mình chỉ nhớ là mình biết như vậy =))
    - Có gì sai sót mong anh em góp ý nhiệt tình
    - Sẽ có Update cho FF nếu thấy cần thiết
     
  2. Huân Hoàng

    Huân Hoàng Administrator Thành viên BQT Administrator Super Moderator
    • 93/113

    Tham gia ngày:
    29/9/15
    Bài viết:
    642
    Đã được thích:
    1,181
    Cám ơn bạn đã đóng góp cho 4rum và kinh nghiệm cho mọi người <3<3
     
    kamsamita1 and Nguoi Gac Den like this.
  3. 0hyears

    0hyears Thành viên mới
    • 3/6

    Tham gia ngày:
    26/8/16
    Bài viết:
    3
    Đã được thích:
    3
    nếu muốn mở youtube trong cửa sổ autoit tạo ra đc ko bạn?( ko phải mở bằng IE í)
     
    kamsamita1 thích bài này.
  4. Đức Huy

    Đức Huy Thành viên mới
    • 3/6

    Tham gia ngày:
    3/3/16
    Bài viết:
    3
    Đã được thích:
    6
    kamsamita1 thích bài này.
  5. phuong11111

    phuong11111 Thành viên
    • 18/23

    Tham gia ngày:
    7/1/17
    Bài viết:
    51
    Đã được thích:
    54
    tham khảo cái này bạn
     

    Các file đính kèm:

    kamsamita1 thích bài này.
  6. meomeo192

    meomeo192 Thành viên mới
    • 3/6

    Tham gia ngày:
    11/2/17
    Bài viết:
    4
    Đã được thích:
    5
    Liệu Browser do AI viết ra có thể enable/ disable Javascript từ website cho trước, giống add on NoScript của Firefox ko bạn?
     
    kamsamita1 thích bài này.
  7. nghiahsgs

    nghiahsgs Thành viên mới
    • 3/6

    Tham gia ngày:
    14/4/16
    Bài viết:
    10
    Đã được thích:
    3
    Tiếp FF và Chrome đi bác =))
     
  8. hoangtieubao

    hoangtieubao Thành viên
    • 8/11

    Tham gia ngày:
    31/5/17
    Bài viết:
    41
    Đã được thích:
    11
    QUA MỘT THỜI GIAN NGHIÊN CỨU. GIỜ MÌNH CÓ KẾT QUẢ DÀNH CHO AI MUỐN RUN JS TRONG AUTOIT
    TẢI EXAMPLE QUA FILE ĐÍNH KÈM NHÉ
     

    Các file đính kèm:

    Huân Hoàng thích bài này.
  9. Huân Hoàng

    Huân Hoàng Administrator Thành viên BQT Administrator Super Moderator
    • 93/113

    Tham gia ngày:
    29/9/15
    Bài viết:
    642
    Đã được thích:
    1,181
    Ngon, trước đây iêm cũng biết đến .execScript nhưng không biết có thể gọi nhiều lần .execScript để nhúng thư viện js vào :D
    Cơ mà cái .Eval không hoạt động được thým ợ, không biết có phải do tuỳ vào phiên bản IE không:

    [​IMG]

    nên iêm viết lại thành cho js document.write(giá trị) ra about:blank rồi dùng $oIE.document.body.innerHTML để đọc giá trị đó, hơi rườm rà hơn tí nhưng nó ổn cho mọi phiên bản :|

    Từ gợi ý của thým iêm viết thành hàm chạy javascript trên AutoIt thấy cũng ổn và đang cho một số người test, nếu có phản hồi tốt thì iêm cho nó vô luôn cái UDF _HttpRequest của iêm :p Thanks thým đã thông não :D

    Hình test 1:
    [​IMG]

    Hình test 2:
    [​IMG]

    Hình test 3:
    [​IMG]


     
    tuoitre and emga9xkc like this.
  10. hoangtieubao

    hoangtieubao Thành viên
    • 8/11

    Tham gia ngày:
    31/5/17
    Bài viết:
    41
    Đã được thích:
    11
    cho xin cái source để xem chi tiết hơn nhé ^^ để nghiên cứu thôi
    còn eval thì là giống Eval của AutoIT hoặc eval trong JS
    nó chỉ có thể thực hiện lệnh đơn giản chứ phức tạp kiểu multi-line thì hay bị lỗi lắm
    Thông thường, để thực hiện eval trơn tru thì buộc phải thực hiện .execScript trước tiên
    .execScript là execute Script - nó thực hiện lệnh tốt hơn, bao gồm multi-line hoặc nhúng thư viện
    thế nên trong code, mình dùng execScript để nhúng thư viện và dùng eval để call hàm
    cách này linh động hơn trong việc dùng js, khả năng tùy biến cao và tương thích tốt

    Minh họa dễ hiểu thì ta có 2 hàm Startup và Shutdown trong UDF chẳng hạn như sau:
    Mã (AutoIt):

    Func Startup()
    $oIE = _IECreate("about:blank", False, False)
    ; đặt $Link = "about:blank" để có thể hide được IE và run eval hoặc execScript không bị lỗi
    EndFunc

    Func Shutdown()
    _IEQuit($oIE)
    EndFunc
     
    Và 2 hàm sau để dùng js thuận tiện:
    Mã (AutoIt):

    Func IncludeLibrary($sLibraryName)
    $oIE.document.parentwindow.execScript(FileRead($sLibraryName))
    EndFunc

    Func JSCall($sFuncName, $p1 = Null, $p2 = Null, $p3 = Null) ; tự thêm số lượng params của func
    ; cái này tự viết đi lười viết quá trời =))
    EndFunc
     
  11. Khánh Văn

    Khánh Văn Thành viên mới
    • 1/6

    Tham gia ngày:
    31/8/17
    Bài viết:
    1
    Đã được thích:
    0
    giải thích cho mình cái html đc ko ông ?
     
  12. Ngô toàn

    Ngô toàn Thành viên mới
    • 1/6

    Tham gia ngày:
    18/2/18
    Bài viết:
    1
    Đã được thích:
    0
    thanks thớt nhé, dùng js đúng là dễ hơn hàm autoit cung cấp nếu quen :D
     

Chia sẻ trang này

Đang tải...