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’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”,””)