2

当社は、事業運営のためにブラウザベースのプログラムを使用しています。私の目標は、このシステムから自動的にデータを取得することです。

サイト自体はかなりフレームを多用していますが、私はそれをうまく処理しています。今目の前にある問題は、自分のデータが格納されている画面に移動することです。

リンク自体は JavaScript でコーディングされており、アンカー タグが表示されません (画像は +/- であり、間隔のために非表示になっています)

ソースコード

<div id='Nav_4' aTag='aTarget'  title='Target' aUrl="javascript:top.aaa.submitPage('NavigateTo','~/aPages/aPage.aspx?UC=a')">
 <img alt='' style="margin-left:0px; width:0px "/>
 <img src='/a/a.axd?d=a' alt='(Collapsed)' aAltX='(Expanded)' imgType='exp' />
 <img alt=''style='width:5px; visibility:hidden;'>
<span atxt='1' class="   breadcrumbTreeItem">
 Target
</span></div>

タグを取得できなかったり、リンクのドキュメントを検索したりできなかったため、代わりに「Target」を含む span タグを見つけてアクティブ化しようとしました。

これが作業コードです! (i5 はイテレータ)

Set ie = GetOpenIEByURL("https://aaa.com/AAA.htm")
fIter = 0
 For Each frmSet In ie.document.getElementsByTagName("Frame")
  If Left(frmSet.src, 7) = "aaa/AAA" Then
   myFrame = f_Iter
   Exit For
  End If
f_Iter = f_Iter + 1
Next

With ie
 For i5 = 0 To ie.document.frames(myFrame).document.all.tags("SPAN").Length - 1
  With .document.frames(myFrame).document.all.tags("SPAN").Item(i5)
   If InStr(.innerText, "Target") > 0 Then
    .Click
    Exit For
   End If
  End With
 Next i5
End With

さらに、モジュールに次のコードを追加します。

'Finds an open IE site by checking the URL
Function GetOpenIEByURL(ByVal i_URL As String) As InternetExplorer
Dim objShellWindows As New ShellWindows

  'ignore errors when accessing the document property
  On Error Resume Next
  'loop over all Shell-Windows
  For Each GetOpenIEByURL In objShellWindows
    'if the document is of type HTMLDocument, it is an IE window
    If TypeName(GetOpenIEByURL.document) = "HTMLDocument" Then
      'check the URL
      If Left(GetOpenIEByURL.document.URL, 30) = Left(i_URL, 30) Then
        'leave, we found the right window
        Exit Function
      End If
    End If
  Next
End Function
4

1 に答える 1

0

あなたのコードを見ると、わかります

elementList = ie.document.frames(myFrame).document.getElementsByTagName("span")

Set次のようにと一緒に使用する必要があります。

Set elementList = ie.document.frames(myFrame).document.getElementsByTagName("span")

行のエラーに関する限り、いつでもこれをorDimとして定義できます。これは、返される型がまだ有効であるため、引き続き機能するはずです。ObjectVariantgetElementsByTagName


あなたの更新に応答して、ボタンをクリックするには、次を使用します。

Set objButton = IEPage.getelementbyid("buttonname")
IEPage.onmousedown 'There is JS code that catches these actions for validation, so we artificially trigger them on the page. Your requirements may vary.
objButton.Focus
objButton.Click

あなたのコードと混ぜて、私はそれを次のようにまとめます(テストされていません):

With ie
 For i5 = 0 To ie.document.frames(myFrame).document.all.tags("SPAN").Length - 1
  With .document.frames(myFrame).document.all.tags("SPAN").Item(i5)
   If InStr(.innerText, "Target") > 0 Then
    Debug.Print .innerText
    ie.document.frames(myFrame).document.onmousedown
    .Focus
    .Click
    Exit For
   End If
  End With
 Next i5
End With
于 2013-05-21T14:16:02.240 に答える