2017-06-03 59 views
1

iframeに埋め込まれているように見えるポップアップウィンドウの要素にアクセスしようとしています。以下は私が扱っているhtmlです。私が興味を持っているのは、OK .../a>です。それはかなり大きいので、私はいくつかのHTMLを残して、私はそれが役に立つとは思わなかった。必要なら私は投稿することができます。私はこれにアクセスするために多くの組み合わせを試しましたが、これまでのところOKボタンはありません。以下は私のベスト推測のコードは動作しません。Powershell IEオブジェクトが正しい要素を見つける

$ie.Document.getElementsByTagName("A") | Where {$_.getAttributeNode 
('class').Value -eq 'btn btn3d PopupBtn'} 

<html> 
<head>...</head> 
    <body> 
    <iframe id="12345"src="https://example.com/html/messagepopup.html" 
    frameborder="0" style="width:100%; height: 154px;"> 
    <!-- COMMENT HERE about the software 
    --> 
    <html> 
    <head> 
    <link href="https://example.com/path/to/custompage.css"rel=stylesheet"> 
    </link> 
    </head> 
    <body class="popupmsg" onload="onload()"> 
    <div class="PopupMsgFooter" id="PopupMsgFooter"> 
    <a class="btn bnt3d PopupBtn" href="#" arid="2"arwindowid="0">OK</a> 
    </body> 
    </html> 
    </iframe> 
</body> 
</html> 

答えて

0

ボタンがインラインフレームの内側にある、とiframeは独自の個別のDOMを持っています。

  1. iframe要素
  2. はここでのiframeのcontentDocument

$iframe = $ie.Document.getElementsByTagName('iframe') | 
    Where { $_.src -contains '/messagepopup.html' } 
$ok = $iframe.contentDocument.getElementsByTagName('a') | 
    Where { $_.className -eq 'btn bnt3d PopupBtn' } 
+0

ありがとうございました。これは良い情報ですが、私にとってはうまくいきませんでした。奇妙なことに、最初の行$ iframeは空です。私はIDを使用してiframe要素を取得することができますが、一時的な解決策として変更されます。 $ iframeオブジェクトがあると、2行目にヌル値の式エラーが返されます。 contentdocumentは私が思う問題です。 "document"を使用すると何も返されません。 –

+0

最後に! w0xx0mのおかげで、私は正しい軌道に乗りました。上記の答えがなければ可能ではなかっただろう。 –

1

内のボタンが最終的な答えで探します。下に非常に近いが、私の最終的な答えは複雑である。このHTML DOCには2つのiframeがあり、何らかの理由でsrcで検索すると正しい結果が返されませんでした。代わりに私はもう一方を排除しなければならなかった。奇妙だが、うまくいく。 2行目は物事のホッジポッジです。私はgoogledとcontentwindowしようとすることが動作することがわかった。多くの反復の後、私は下の行を考え出した。 contentdocumentの代わりに、私はcontentwindowを使わなければならなかった。 (なぜ誰かが知っていますか?)同じクラス名の下に2つのボタンがあるため、where節も変更する必要がありました。ここの私のユニークな価値は乾燥したものでした。正しいオブジェクトへの参照を取得したら、必要な変更を確認するのは簡単でした。このために真剣なKUDOSは.....これは.....

$iframe = $ie.Document.getElementsByTagName('iframe') 
    | Where { $_.id -notcontains 'pinghtml' } 

$ok = $iframe.contentwindow.document.body.getElementsByTagName('a') 
    | Where {$_.getAttributeNode('arid').Value -eq '2'} 

$ok.click() 
関連する問題