Trying to automate IE

Welcome Forums General PowerShell Q&A Trying to automate IE

This topic contains 2 replies, has 2 voices, and was last updated by

 
Participant
2 weeks, 2 days ago.

  • Author
    Posts
  • #181100

    Participant
    Topics: 27
    Replies: 28
    Points: 151
    Rank: Participant

    I am working on a script to automate filling out a ticketing system in IE. Typically for web browser automation I turn to AutoIt, but thought I would try if I could do this purely through PowerShell. Creating the page and navigating to it works just fine:

    $screen = [System.Windows.Forms.Screen]::PrimaryScreen.Bounds
    $oIE = New-Object -ComObject "InternetExplorer.Application" -ErrorAction Stop
    $oIE.width = $screen.width
    $oIE.height = $screen.height
    $oIE.Top = 0
    $oIE.Left = 0
    $oIE.Visible = $true
    $oIE.Silent = $true
    $oIE.Navigate("myURL")
    { 
        Start-Sleep -Milliseconds 1000; 
    } 
    

    I am unable, however, to pull the fields from the form. I tried something like this to get the main form:

    $oCol = $oIE.document.forms.item("mainForm")
    

    but no joy (I tried in AutoIt, and it works fine, so not sure why I can't in PowerShell). Also tried just getting the element by ID, like so (using a description field as example):

    $oIE.document.getElementsByTagName("input") | % {
        if ($_.id -ne $null){
            if ($_.id.Contains("Title4")) {
                "Found it"
            }
        }
    }
    

    Based on the html line:

    input type='text' id='mainForm-Title4' name='Title' value="

    But I get "You cannot call a method on a null expression" on the getElementsByTagName call.

    Even something so simple as trying to get the $oIE.Document doesn't work. Just hoping someone can point out what I am obviously doing wrong.

  • #181106

    Participant
    Topics: 5
    Replies: 7
    Points: 72
    Rank: Member

    In my tests, I was able to find specific forms with these:

    $oIE.Document.getElementById('companyNbr')
    $oIE.document.getElementsByTagName("input") | where { $_.id -eq 'companyNbr' }

    Or if you don't know the exact ID, you can use -match:

    $oIE.document.getElementsByTagName("input") | where { $_.id -match 'companyNbr' }

    edit:

    I should've read through to the last two lines, sorry!

    After running

    $oIE = New-Object -ComObject "InternetExplorer.Application" -ErrorAction Stop
    $oIE.Visible = $true
    you should see an Internet Explorer window pop up on your main screen. If you aren't seeing that then, for whatever reason, the object creation likely failed. If you've run it multiple times, it might help to try killing all iexplore.exe processes and try running the code again. If that is causing a mix-up, try running $oIE.Quit() before running the code to create the object again.
  • #181109

    Participant
    Topics: 27
    Replies: 28
    Points: 151
    Rank: Participant

    I do see the object created, the window pops up. My problem has been getting any of the objects in the DOM. Based on the viewer, and the one field having an id of  id='mainForm-Title4', I should be able to do something like

    $oIE.document.getElementsByTagName("input") | where {$_.id -match 'Title4'}

    but still get the same error about it being a null expression

You must be logged in to reply to this topic.