فئة مجمعة للأتمتة حول كائن InternetExplorer مما يسهل التحكم فيه باستخدام VBScript.
الإعداد | الاستخدام | IE-OBJECT | عقارات | الطرق | التاريخ | اتصال
أولاً، دعونا نضيف الفصل إلى ملف 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-OBJECT | عقارات | الطرق | التاريخ | اتصال
الآن بعد أن أضفنا الفئة إلى ملف VBScript الخاص بنا، فلنقم بإنشاء مثيل لها.
Set eIE = New EasyIEAutomate
'your code here
افتراضيًا، لن يؤدي هذا إلى إنشاء عملية IE على الفور. والسبب في ذلك هو أنه إذا كان لديك نافذة أو علامة تبويب موجودة في IE، فيمكنك الحصول على هذه العملية بدلاً من إنشاء واحدة جديدة. يمكن إنشاء نافذة موجودة أو الحصول عليها بعدة طرق: Init() و ReBase() و RePoint() و Late() .
دعونا نرى بعض الأمثلة:
' 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-OBJECT | عقارات | الطرق | التاريخ | اتصال
لا يزال من الممكن الوصول إلى جميع خصائص وطرق 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-OBJECT | عقارات | الطرق | التاريخ | اتصال
الآن دعونا ندخل في بعض الخصائص الجديدة المضافة.
@يعود
[صفيف] - مجموعة من عمليات 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.
@يعود
[سلسلة] - عنوان URL لعملية IE الحالية. مثل eIE.Base.LocationURL . تنبيهات في حالة عدم وجود عملية IE.
@يعود
[سلسلة] - عنوان عملية IE الحالية. نفس eIE.Base.LocationName . تنبيهات في حالة عدم وجود عملية IE.
الإعداد | الاستخدام | IE-OBJECT | عقارات | الطرق | التاريخ | اتصال
إغلاق عملية IE الحالية. نفس eIE.Base.Quit . تنبيهات في حالة عدم وجود عملية IE.
إغلاق جميع عمليات IE المفتوحة (المخفية أو المرئية).
يضبط إمكانية رؤية عملية IE الحالية على القيمة true. نفس 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 [سلسلة] - عنوان url للانتقال إليه.
ينشئ علامة تبويب جديدة ويتنقل في عملية IE إلى هذا الموقع. مثل eIE.Base.Navigate2 "URL_HERE"، 2048 . تنبيهات في حالة عدم وجود عملية IE، ثم إنشاء واحدة.
@params
url [سلسلة] - عنوان url للانتقال إليه.
يقوم بإنشاء علامة تبويب جديدة في الخلفية وينقل عملية IE إلى هذا الموقع. مثل eIE.Base.Navigate2 "URL_HERE"، 4096 . تنبيهات في حالة عدم وجود عملية IE، ثم إنشاء واحدة.
@params
url [سلسلة] - عنوان url للانتقال إليه.
ينتظر حتى تنتهي عملية IE الحالية من التحميل. تنبيهات في حالة عدم وجود عملية IE.
تنتظر الطريقة انتهاء تحميل العنصر المُدخل. يمكن تحميل الصفحة الحالية ولكن المحتوى الموجود بداخلها، مثل إطار iframe، قد لا يزال يحتاج إلى وقت للتحميل.
@params
elem [object] - كائن عنصر 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() .
تنتظر الطريقة تحميل العنصر ثم تقوم بإرجاع محتوى الإطار. تنبيهات وإنهاء البرنامج النصي في حالة انتهاك نفس سياسة الأصل. يستخدم للوصول إلى/تحرير الأشياء داخل الإطار.
@params
squery [string] - سلسلة استعلام للحصول على iframe.
@يعود
[object] - مستند محتوى عنصر الإطار ككائن.
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 المفتوحة حاليًا والتي تريد تغيير الكائن الأساسي إليها.
يقوم بتغيير Base إلى أحدث كائن في 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
الاستعلام [سلسلة] - سلسلة الاستعلام لتحديد العناصر بها.
@يعود
[الكائن] - العناصر التي تم العثور عليها ككائن 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-OBJECT | عقارات | الطرق | التاريخ | اتصال
ADD
- تمت إضافة الوثائق إلى README.md .CHANGE
- تمت إعادة تسمية الطرق على النحو التالي: NavigateT() إلى NavigateTab() و NavigateBT() إلى NavigateBgTab() .CHANGE
- أصبح ReBase() الآن اسمًا مستعارًا لأسلوب Init() الافتراضي.ADD
- النوافذ المنبثقة المحددة بوقت للأخطاء التي لا تستحق الإنهاء. راجع الوثائق لمعرفة طرق التنبيه.CHANGE
- تم تغيير أمثلة مجلد التدريب في Challenge.vbs و answers.vbs لتعكس أحدث بناء الجملة.ADD
- الإصدار الأولي.الإعداد | الاستخدام | IE-OBJECT | عقارات | الطرق | التاريخ | اتصال
جيريمي إنجلاند (SimplyCoded) - [email protected]
وزعت بموجب ترخيص معهد ماساتشوستس للتكنولوجيا. راجع LICENSE
لمزيد من المعلومات.