Windows PowerShell ile Internet explorer otomasyonu

Windows Powershell ile windows işletim sisteminin kaynaklarına kolayca erişebilmekteyiz.  Powershell’de işlerimizi genel olarak cmdlet denen komutlarla yapıyoruz. Bu blogumuzda basitçe, windows işletim sistemiyle birlikte gelen internet explorer tarayıcısının otomasyonunu yapacağız. Yani otomatik olarak internet explorer’ı açacağız. Bir url’e yönlendireceğiz. Sayfa yüklenmesini bekleyecek, ve gelen html sayfasına erişip sonuçları inceleyeceğiz.

Powershell scriptini yazmak için windowsla birlikte gelen powershell editorunu kullanabiliriz. Fakat editor olarak benim tercihim powergui olacak. Açık kaynak kodlu yazılmış ve benzerlerine göre stabil çalışan bir editör. Tablı bir yapısı var. Yani bir tab’da scriptinizi yazarken, aklınıza birşey denemek geldi. Hemen farklı bir tab açıp orada deneyebilirsiniz. Pratik ve kullanışlı.

powergui

Powergui’i çalıştırdığımızda karşımıza böyle bir ekran çıkacak. Dosya menüsünden yeniye tıkladığımızda boş bir editor ekranı açacak, buraya powershell cmdletlerimizi yazacağız.

Boş editöre aşağıdaki satırları yazalım:

     $ie = New-Object -com internetexplorer.application

     $ie.visible = $true

     $url=’http://www.google.com/’

     $ie.navigate($url)

ve çalıştıralım (F5′e basalım). Powershell’i öğrenmek için yapılması gereken en önemli şey, gördüğümüz komutları hemen yazıp, çalıştırmak.

İlk satırımızda bir değişken tanımlayıp, ona yeni bir com objesi atıyoruz (internet explorer application), daha sonra visible özelliğini true yapıyoruz. Url tanımlayıp, tarayıcıyı bu adrese yönlendiriyoruz. Böylece internet explorer tarayıcısını, kendisine bizzat dokunmadan powershell scripti ile yönetmiş oluyoruz. $ie objesinde visiblegibi başka hangi özellikler var diye merak ediyorsanız, şu komutu çalıştırabilirsiniz:

    New-Object -com internetexplorer.application | Get-Member

bu komut bize şöyle bir sonuç dönecektir:

   TypeName: System.__ComObject#{d30c1661-cdaf-11d0-8a3e-00c04fc9e26e}

Name                 MemberType Definition
—-                 ———- ———-
ClientToWindow       Method     void ClientToWindow (int, int)
ExecWB               Method     void ExecWB (OLECMDID, OLECMDEXECOPT, Variant, Variant)
GetProperty          Method     Variant GetProperty (string)
GoBack               Method     void GoBack ()
GoForward            Method     void GoForward ()
GoHome               Method     void GoHome ()
GoSearch             Method     void GoSearch ()
Navigate             Method     void Navigate (string, Variant, Variant, Variant, Variant)
Navigate2            Method     void Navigate2 (Variant, Variant, Variant, Variant, Variant)
PutProperty          Method     void PutProperty (string, Variant)
QueryStatusWB        Method     OLECMDF QueryStatusWB (OLECMDID)
Quit                 Method     void Quit ()
Refresh              Method     void Refresh ()
Refresh2             Method     void Refresh2 (Variant)
ShowBrowserBar       Method     void ShowBrowserBar (Variant, Variant, Variant)
Stop                 Method     void Stop ()
AddressBar           Property   bool AddressBar () {get} {set}
Application          Property   IDispatch Application () {get}
Busy                 Property   bool Busy () {get}
Container            Property   IDispatch Container () {get}
Document             Property   IDispatch Document () {get}
FullName             Property   string FullName () {get}
FullScreen           Property   bool FullScreen () {get} {set}
Height               Property   int Height () {get} {set}
HWND                 Property   int64 HWND () {get}
Left                 Property   int Left () {get} {set}
LocationName         Property   string LocationName () {get}
LocationURL          Property   string LocationURL () {get}
MenuBar              Property   bool MenuBar () {get} {set}
Name                 Property   string Name () {get}
Offline              Property   bool Offline () {get} {set}
Parent               Property   IDispatch Parent () {get}
Path                 Property   string Path () {get}
ReadyState           Property   tagREADYSTATE ReadyState () {get}
RegisterAsBrowser    Property   bool RegisterAsBrowser () {get} {set}
RegisterAsDropTarget Property   bool RegisterAsDropTarget () {get} {set}
Resizable            Property   bool Resizable () {get} {set}
Silent               Property   bool Silent () {get} {set}
StatusBar            Property   bool StatusBar () {get} {set}
StatusText           Property   string StatusText () {get} {set}
TheaterMode          Property   bool TheaterMode () {get} {set}
ToolBar              Property   int ToolBar () {get} {set}
Top                  Property   int Top () {get} {set}
TopLevelContainer    Property   bool TopLevelContainer () {get}
Type                 Property   string Type () {get}
Visible              Property   bool Visible () {get} {set}
Width                Property   int Width () {get} {set}

Powershell’in pipe yapısını kullanarak önce ‘New-Object -com internetexplorer.application’ komutunu çalıştırıyoruz, bu komut yeni bir obje oluşturup dönüyor, dönen objeyi get-member’a parametre olarak geçiyor. Unix veya linux kullananlar pipe yapısına aşinadırlar. Burda ilginç olan nokta aktarımda objelerin kullanılabilmesi, örneğimizdeki com objesi gibi.

Şimdide açılan google sayfasında, inputbox kutusuna bir değer yazacağız, tabi yine powershell kullanarak (önceki yazdığımız scripte yeni eklenenler koyu renkli).  

$ie = New-Object -com internetexplorer.application

$ie.visible = $true

$url=’http://www.google.com/’

$ie.navigate($url)

while($ie.busy) {start-sleep 1}   # Sayfanın yüklenmesini bekliyoruz

$doc = $ie.document 

$searchBox = $doc.getElementByID(“gbqfq”)

$searchBox.value = “Orchard cms”

Scripti çalıştırdığımız zaman textbox’a Orchard cms yazılmış oluyor. # işaretini scriptinize yorum yazmak için kullanabilirsiniz. $searchBox = $doc.getElementByID(“gbqfq”) satırında gbqfq kelimesi sayfadaki html input box’ın id’si. Chrome tarayıcısında önce mouse ile oraya tıklayın, sağa fare tuşuna klikleyip, öğeyi denetle menüsüne tıklayınca, ilgili input elementi hakkında detaylı bilgiye ulaşabilirsiniz.

Arama textimizi yazdırdık; Google’ın aramayı başlatması için son olarak şu satırı yazıyoruz.

$searchBox.FireEvent(“onkeypress”,””)

Scriptimizin son hali:

     $ie = New-Object -com internetexplorer.application

     $ie.visible = $true

$url=’http://www.google.com/’

     $ie.navigate($url)

while($ie.busy) {start-sleep 1} # Sayfanın yüklenmesini bekliyoruz

$doc = $ie.Document

$searchBox = $doc.getElementByID(“gbqfq”)

$searchBox.value = “Orchard cms”

$searchBox.FireEvent(“onkeypress”,””)

Yorum Gönder

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir