คลาส wrapper อัตโนมัติรอบวัตถุ InternetExplorer ที่ทำให้ง่ายต่อการควบคุมด้วย VBScript
ตั้งค่า | การใช้งาน | IE-วัตถุ | คุณสมบัติ | วิธีการ | ประวัติศาสตร์ | ติดต่อ
ขั้นแรก เรามาเพิ่มคลาสลงในไฟล์ VBScript ของเราเอง
With CreateObject( "Msxml2.XMLHttp.6.0" )
Call .open( "GET" , "https://raw.githubusercontent.com/simply-coded/easy-ie-automate/master/eiea.vbs" , False )
Call .send() : Call Execute(.responseText)
End With
'your code here...
ดาวน์โหลดไฟล์ eiea.vbs
คุณสามารถ คัดลอกและวาง หรือ นำเข้า โค้ดลงในไฟล์ VBScript ของคุณได้
Class EasyIEAutomate
'paste the EasyIEAutomate class in place of this one.
End Class
'your code here...
Dim eieaPath : eieaPath = "c:pathtoeiea.vbs"
Execute(CreateObject( "Scripting.FileSystemObject" ).OpenTextFile(eieaPath, 1 ).ReadAll)
'your code here...
ตั้งค่า | การใช้งาน | IE-วัตถุ | คุณสมบัติ | วิธีการ | ประวัติศาสตร์ | ติดต่อ
ตอนนี้เราได้เพิ่มคลาสลงในไฟล์ VBScript ของเราแล้ว มาสร้างตัวอย่างกันดีกว่า
Set eIE = New EasyIEAutomate
'your code here
ตามค่าเริ่มต้น สิ่งนี้จะ ไม่ สร้างกระบวนการ IE ทันที เหตุผลก็คือถ้าคุณมีหน้าต่าง IE หรือแท็บที่เปิดอยู่ คุณสามารถคว้ากระบวนการนั้นแทนการสร้างใหม่ได้ การสร้างหรือการรับหน้าต่างที่มีอยู่สามารถทำได้หลายวิธี: Init() , ReBase() , RePoint() และ Last()
ลองดูตัวอย่างบางส่วน:
' These all do the same thing.
'1.
Set eIE = ( New EasyIEAutomate)(vbUseDefault)
'2.
Set eIE = ( New EasyIEAutomate)(CreateObject( "InternetExplorer.Application" ))
'3.
Set eIE = New EasyIEAutomate
eIE(vbUseDefault)
'4.
Set eIE = New EasyIEAutomate
eIE(CreateObject( "InternetExplorer.Application" ))
'Already have the object
Set objIE = CreateObject( "InternetExplorer.Application" )
Set eIE = ( New EasyIEAutomate)(objIE)
'Already have the object
Set objIE = CreateObject( "InternetExplorer.Application" )
Set eIE = New EasyIEAutomate
eIE.ReBase objIE
สามารถใช้เมธอด ReBase() ได้ตลอดเวลาเพื่อเปลี่ยนกระบวนการ IE ที่คลาสควบคุมอยู่ และเป็นเพียงนามแฝงสำหรับเมธอด Init()
Set eIE = New EasyIEAutomate
'URL of the IE window that is already open.
eIE.RePoint "https://www.google.com/?gws_rd=ssl"
Set eIE = New EasyIEAutomate
'Will get the most recent IE process created.
eIE.Latest
หากคุณเริ่มต้นด้วยไม่มีกระบวนการ IE EasyIEAutomate จะสร้างกระบวนการขึ้นมาโดยอัตโนมัติเมื่อคุณเริ่มใช้คลาส ป๊อปอัปหนึ่ง (1) วินาทีของ "เริ่มต้นวัตถุ IE ใหม่โดยอัตโนมัติ" จะแจ้งให้คุณทราบหากเป็นเช่นนั้น
Set eIE = ( New EasyIEAutomate)( Nothing )
' Or just: Set eIE = New EasyIEAutomate
' This and many other methods and properties will trigger an automatic creation of an IE process if none exist.
eIE.Show
ตั้งค่า | การใช้งาน | IE-วัตถุ | คุณสมบัติ | วิธีการ | ประวัติศาสตร์ | ติดต่อ
คุณสมบัติ และ วิธีการ ของ IE ทั้งหมดที่คุณใช้ยังคงสามารถเข้าถึงได้ผ่านคุณสมบัติ ฐาน
Set IEA = ( New EasyIEAutomate)(vbUseDefault)
'Navigate to Google.
IEA.Base.Navigate "http://www.google.com/"
'Adjust the look of the window.
IEA.Base.AddressBar = False
IEA.Base.MenuBar = False
IEA.Base.StatusBar = False
IEA.Base.Height = 500
IEA.Base.Width = 800
'Wait for window to load
While IEA.Base.Busy : WScript.Sleep( 400 ) : Wend
'Center the window on screen.
Dim SCR : Set SCR = IEA.Base.Document.ParentWindow.screen
IEA.Base.Left = (SCR.width - IEA.Base.Width) / 2
IEA.Base.Top = (SCR.height - IEA.Base.Height) / 2
'Show the window
IEA.Base.Visible = True
'Change the title of the window
IEA.Base.Document.title = "Google Searcher"
หากทั้งหมดนี้ดูไม่คุ้นเคยสำหรับคุณ ฉันขอแนะนำให้ตรวจสอบคุณสมบัติและวิธีการหลักทั้งหมดที่นี่
ตั้งค่า | การใช้งาน | IE-วัตถุ | คุณสมบัติ | วิธีการ | ประวัติศาสตร์ | ติดต่อ
ตอนนี้เรามาดูคุณสมบัติใหม่ที่เพิ่มเข้ามากัน
@กลับ
[array] - อาร์เรย์ของกระบวนการ IE ที่มีอยู่ (หน้าต่างและแท็บ)
' EXAMPLE 1:
Set eIE = New EasyIEAutomate
' Get number of tabs/windows opened.
count = UBound(eIE.Avail) + 1
' Collect their names & url and show them.
collect = ""
For Each ie In eIE.Avail
collect = collect & ie.LocationName & " - " & ie.LocationURL & vbLF
Next
MsgBox collect, vbOKOnly, "IE object(s) open = " & count
' EXAMPLE 2
Set google = New EasyIEAutomate
' Search for a tab/window using google
For Each ie In google.Avail
If InStr(ie.LocationURL, "google.com/" ) Then
google(ie)
Exit For
End If
Next
If google.Base Is Nothing Then
ans = MsgBox( "IE with google was not found. Create one?" , vbYesNo + vbQuestion)
If ans = vbYes Then
google(vbUseDefault) ' This creates a new IE process
google.Base.Navigate "https://www.google.com/"
Else
WScript.Quit
End If
End If
' Show the window if it was hidden or a new one was created.
google.Base.Visible = True
' Wait for it to load before trying to mess with it
While google.Base.Busy : WScript.Sleep 400 : Wend
' Search for something in google.
google.Base.Document.getElementById( "lst-ib" ).Value = "searching in google"
google.Base.Document.getElementById( "tsf" ).Submit
WScript.Sleep 2000
' This would be a better way to search, but these are just examples.
google.Base.Navigate "https://www.google.com/#q=alternative+search+in+google"
@กลับ
[วัตถุ] - วัตถุหลักของ Internet Explorer ดูวัตถุ IE
@กลับ
[string] - URL ของกระบวนการ IE ปัจจุบัน เช่นเดียวกับ eIE.Base.LocationURL แจ้งเตือนหากไม่มีกระบวนการ IE
@กลับ
[string] - ชื่อของกระบวนการ IE ปัจจุบัน เช่นเดียวกับ eIE.Base.LocationName แจ้งเตือนหากไม่มีกระบวนการ IE
ตั้งค่า | การใช้งาน | IE-วัตถุ | คุณสมบัติ | วิธีการ | ประวัติศาสตร์ | ติดต่อ
ปิดกระบวนการ IE ปัจจุบัน เช่นเดียวกับ eIE.Base.Quit แจ้งเตือนหากไม่มีกระบวนการ IE
ปิดกระบวนการ IE ที่เปิดอยู่ทั้งหมด (ซ่อนหรือมองเห็นได้)
ตั้งค่าการมองเห็นของกระบวนการ IE ปัจจุบันเป็นจริง เช่นเดียวกับ eIE.Base.Visible = True แจ้งเตือนหากไม่มีกระบวนการ IE จากนั้นจึงสร้างกระบวนการขึ้นมา
ตั้งค่าการมองเห็นของกระบวนการ IE ปัจจุบันเป็นเท็จ เช่นเดียวกับ eIE.Base.Visible = False แจ้งเตือนหากไม่มีกระบวนการ IE จากนั้นจึงสร้างกระบวนการขึ้นมา
จัดหน้าต่างให้อยู่ตรงกลางหน้าจอ หากไม่มีเว็บไซต์ใดโหลดเว็บไซต์ที่มี "about:blank" จะถูกนำทางไปยัง จำเป็นต้องมีเว็บไซต์ที่โหลดเพื่อให้ได้ความละเอียดของหน้าจอ
Set eIE = ( New EasyIEAutomate)(vbUseDefault)
' Centering before the browser is visible makes for a nicer looking experience.
eIE.Center
eIE.Show
นำทางกระบวนการ IE ไปยังตำแหน่งนี้ เช่นเดียวกับ eIE.Base.Navigate2 "URL_HERE" แจ้งเตือนหากไม่มีกระบวนการ IE จากนั้นจึงสร้างกระบวนการขึ้นมา
@params
url [string] - URL ที่อยู่ที่จะนำทางไป
สร้างแท็บใหม่และนำทางกระบวนการ IE ไปยังตำแหน่งนี้ เช่นเดียวกับ eIE.Base.Navigate2 "URL_HERE", 2048 แจ้งเตือนหากไม่มีกระบวนการ IE จากนั้นจึงสร้างกระบวนการขึ้นมา
@params
url [string] - URL ที่อยู่ที่จะนำทางไป
สร้างแท็บพื้นหลังใหม่และนำทางกระบวนการ IE ไปยังตำแหน่งนี้ เช่นเดียวกับ eIE.Base.Navigate2 "URL_HERE", 4096 แจ้งเตือนหากไม่มีกระบวนการ IE จากนั้นจึงสร้างกระบวนการขึ้นมา
@params
url [string] - URL ที่อยู่ที่จะนำทางไป
รอให้กระบวนการ IE ปัจจุบันโหลดเสร็จสิ้น แจ้งเตือนหากไม่มีกระบวนการ IE
วิธีการนี้จะรอให้องค์ประกอบที่ป้อนเข้าโหลดเสร็จสิ้น สามารถโหลดหน้าปัจจุบันได้ แต่เนื้อหาภายในเช่น iframe อาจยังต้องใช้เวลาในการโหลด
@params
elem [วัตถุ] - วัตถุองค์ประกอบ HTML เช่น iframe
Set eIE = ( New EasyIEAutomate)(vbUseDefault)
eIE.Navigate "https://rawgit.com/simply-coded/easy-ie-automate/master/practice/index.html"
eIE.Show
' Wait for main webpage to load
eIE.WaitForLoad
' Get an iframe on that page.
Set myFrame = eIE.Base.Document.getElementById( "ice_frame" )
' Wait for iframe to load if it hasn't already.
eIE.DeepWaitForLoad(myFrame)
' To access things inside an iframe it must respect the same origin policy!
MsgBox myFrame.contentDocument.querySelector( "img" ).src, vbOKOnly, "The image source is:"
อย่างไรก็ตามมีวิธีที่ง่ายกว่านี้ ตัวอย่างถัดไปทำสิ่งเดียวกันกับตัวอย่างนี้โดยใช้ฟังก์ชันที่เรียกว่า Deeper()
วิธีการรอให้องค์ประกอบโหลดแล้วส่งคืน contentDocument ของเฟรม แจ้งเตือนและออกจากสคริปต์หากมีการละเมิดนโยบายต้นทางเดียวกัน ใช้สำหรับเข้าถึง/แก้ไขสิ่งต่าง ๆ ภายในเฟรม
@params
squery [string] - สตริงการสืบค้นเพื่อรับ iframe
@กลับ
[วัตถุ] - contentDocument ขององค์ประกอบเฟรมเป็นวัตถุ
Set eIE = ( New EasyIEAutomate)(vbUseDefault)
eIE.Navigate "https://rawgit.com/simply-coded/easy-ie-automate/master/practice/index.html"
eIE.Show
' Waits for main webpage to load, selects the element, waits for it to load,
' and then returns the element's contentDocument. Alerts and quits if same
' origin policy is violated.
Set myFrame = eIE.Deeper( "#ice_frame" )
MsgBox myFrame.querySelector( "img" ).src, vbOKOnly, "The image source is:"
เปลี่ยนฐานเป็นวัตถุ Internet Explorer อื่น นามแฝงสำหรับวิธีการเริ่มต้น Init() ตัวอย่างสามารถพบได้ในส่วนการใช้งาน
@params
เช่น [วัตถุ] - วัตถุหน้าต่าง/แท็บของ Internet Explorer ที่คุณต้องการเปลี่ยนวัตถุฐาน
เปลี่ยนฐานเป็นวัตถุ Internet Explorer อื่น ตัวอย่างสามารถพบได้ในส่วนการใช้งาน
@params
url [string] - URL ของหน้าต่าง/แท็บ Internet Explorer ที่เปิดอยู่ในปัจจุบันซึ่งคุณต้องการเปลี่ยนวัตถุฐาน
เปลี่ยนฐานเป็นวัตถุ Internet Explorer ล่าสุด ตัวอย่างสามารถพบได้ในส่วนการใช้งาน
ใช้ eIE.Base.Document.querySelector( squery ) เพื่อดึงข้อมูลองค์ประกอบ นี่คือเอกสารเกี่ยวกับ Element.querySelector() ต่อไปนี้เป็นวิธีต่างๆ ในการค้นหาองค์ประกอบ รอให้โหลดเอกสารก่อนค้นหา และแจ้งเตือนและออกหากไม่พบ
@params
squery [string] - สตริงการสืบค้นเพื่อเลือกองค์ประกอบด้วย
@กลับ
[วัตถุ] - องค์ประกอบที่พบเป็นวัตถุ
Set eIE = ( New EasyIEAutomate)(vbUseDefault)
eIE.Navigate "https://rawgit.com/simply-coded/easy-ie-automate/master/practice/index.html"
eIE.Show
' get various elements and interact with them
eIE.Query( ".titles" ).style.color = "deepskyblue"
eIE.Query( "input[name='email']" ).Value = "[email protected]"
eIE.Query( "#pass" ).Value = "bananas_are_the_universal_scale"
eIE.Query( "#milk" ).removeAttribute( "checked" )
eIE.Query( "input[type='radio'][value='female']" ).setAttribute( "checked" )
eIE.Query( "form > p > button" ).Click
ใช้ eIE.Base.Document.querySelectorAll( squery ) เพื่อดึงข้อมูล NodeList ต่อไปนี้เป็นวิธีต่างๆ ในการค้นหาองค์ประกอบ รอให้โหลดเอกสารก่อนค้นหา และแจ้งเตือนและออกหากไม่พบสิ่งใด
@params
squery [string] - สตริงการสืบค้นเพื่อเลือกองค์ประกอบด้วย
@กลับ
[วัตถุ] - องค์ประกอบที่พบเป็นวัตถุ NodeList
Set eIE = ( New EasyIEAutomate)(vbUseDefault)
eIE.Navigate "https://rawgit.com/simply-coded/easy-ie-automate/master/practice/index.html"
eIE.Show
' get elements with class="titles" and all <p> tag elements
Set list = eIE.QueryAll( ".titles, p" )
' change their style up a bit
For i = 0 To list.length - 1
list.item(i).style.backgroundColor = "white"
list.item(i).style.border = "2px solid deepskyblue"
list.item(i).style.fontFamily = "Consolas, monospace"
Next
ตั้งค่า | การใช้งาน | IE-วัตถุ | คุณสมบัติ | วิธีการ | ประวัติศาสตร์ | ติดต่อ
ADD
- เพิ่มเอกสารประกอบใน README.mdCHANGE
- วิธีการเปลี่ยนชื่อดังนี้: NavigateT() เป็น NavigateTab() และ NavigateBT() เป็น NavigateBgTab()CHANGE
- ReBase() ตอนนี้เป็นนามแฝงสำหรับเมธอด Default Init()ADD
- ป๊อปอัปตามเวลาสำหรับข้อผิดพลาดที่ไม่คุ้มที่จะเลิกทำ ดูเอกสารประกอบสำหรับการแจ้งเตือนวิธีการใดบ้างCHANGE
- ตัวอย่างโฟลเดอร์แบบฝึกหัดมีการเปลี่ยนแปลงใน Challenge.vbs และ answer.vbs เพื่อให้สะท้อนถึงไวยากรณ์ใหม่ล่าสุดADD
- การเปิดตัวครั้งแรกตั้งค่า | การใช้งาน | IE-วัตถุ | คุณสมบัติ | วิธีการ | ประวัติศาสตร์ | ติดต่อ
เจเรมี อังกฤษ ( SimplyCoded ) - [email protected]
เผยแพร่ภายใต้ใบอนุญาต MIT ดู LICENSE
สำหรับข้อมูลเพิ่มเติม