Đức Huy Thành viên mới
Tham gia ngày:3/3/16Bài viết:3Đã được thích:4
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 document.write('Hello world')
thì trong AutoIT là
#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 và 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:
#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
#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
#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
Huân Hoàng Administrator Thành viên BQT Administrator Super Moderator
Tham gia ngày:29/9/15Bài viết:646Đã được thích:1,176
0hyears Thành viên mới
Tham gia ngày:26/8/16Bà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.
Đức Huy Thành viên mới
Tham gia ngày:3/3/16Bài viết:3Đã được thích:4
kamsamita1 thích bài này.
phuong11111 Thành viên
Tham gia ngày:7/1/17Bài viết:51Đã được thích:
53
tham khảo cái này bạn
Các file đính kèm:
kamsamita1 thích bài này.
meomeo192 Thành viên mới
Tham gia ngày:11/2/17Bà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.
nghiahsgs Thành viên mới
Tham gia ngày:14/4/16Bài viết:10Đã được thích:
3
Tiếp FF và Chrome đi bác
hoangtieubao Thành viên
Tham gia ngày:31/5/17Bà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.
Huân Hoàng Administrator Thành viên BQT Administrator Super Moderator
Tham gia ngày:29/9/15Bài viết:646Đã được thích:1,176
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
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:
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
Hình test 1:
Hình test 2:
Hình test 3:
tuoitre and emga9xkc like this.
hoangtieubao Thành viên
Tham gia ngày:31/5/17Bà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:
Và 2 hàm sau để dùng js thuận tiện:
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
Khánh Văn Thành viên mới
Tham gia ngày:31/8/17Bài viết:1Đã được thích:
0
giải thích cho mình cái html đc ko ông ?
Ngô toàn Thành viên mới
Tham gia ngày:18/2/18Bà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