2009-09-18 14 views
5

Sto scrivendo alcuni script di automazione di Internet Explorer utilizzando PowerShell. Ecco come mi metto l'oggetto COM IE:Esegui javascript tramite l'interfaccia com di Internet Explorer tramite PowerShell

$ie = New-Object -com "InternetExplorer.Application" 
$ie.Navigate("about:blank") 
$ie.visible = $true 

$doc = $ie.Document 

Allora, che cosa vorrei fare è di eseguire alcuni javascript sull'oggetto $ doc. Ad esempio, ho un articolo sulla pagina che ha un evento onclick che esegue "submitCommand ('lookup')", quindi mi piacerebbe eseguirlo direttamente su $ doc invece di dover trovare l'oggetto sulla pagina e quindi chiama il metodo Click() su di esso.

Sarebbe più semplice se l'oggetto non ha un nome o un ID, il che rende molto ragionevole cambiare poiché posso solo fare affidamento sulla sua posizione sulla pagina (ad esempio: l'elemento dell'undicesimo span nella pagina).

In alternativa, come selezionereste gli elementi in base alla loro classe? Ciò sarebbe di grande aiuto in quanto il "pulsante" ha la sua classe.

Grazie

+0

In alternativa, come selezionereste gli elementi in base alla loro classe? Ciò sarebbe di grande aiuto in quanto il "pulsante" ha la sua classe. – Philippe

+2

@Philippe: invece di commentare la tua stessa domanda con maggiori informazioni e domande, perché non modificare semplicemente la domanda esistente? – AnthonyWJones

risposta

4

$ campate = @ ($ ie.document.getElementsByTagName ("SPAN"))

tubo a dove-oggetto per filtrare quello che vi serve (sulla base di suoi attributi) e quindi chiamare il metodo click, ad esempio:

$span11 = $spans | where {$_.innerText -eq 'something'} 
$span11.click() 
+0

Non esattamente la soluzione che speravo, ma sicuramente una soluzione più pulita per il mio problema. Grazie. – Philippe

+0

A proposito, c'è un modo per memorizzare il risultato del dove in un array? Nel caso in cui ci siano più di un risultato nel filtraggio, viene restituito solo il primo se lo si archivia in una variabile come questa? – Philippe

+1

Puoi racchiuderlo tra '@()': $ span11 = @ ($ span | dove {$ _. InnerText -eq 'qualcosa'})) –

Problemi correlati