Trying to automate IE

Welcome Forums General PowerShell Q&A Trying to automate IE

Viewing 2 reply threads
  • Author
    Posts
    • #181100
      Participant
      Topics: 28
      Replies: 28
      Points: 163
      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: 28
      Replies: 28
      Points: 163
      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

Viewing 2 reply threads
  • The topic ‘Trying to automate IE’ is closed to new replies.