PowerShell:スクレイピングすると“HRESULT からの例外:0x800A01B6”が発生する
メインに使っているデスクトップ端末を Windows 10 Creators Update へアップデートしたのだけど、
以前に作った PowerShell が動作しなくなった。
$urls =@( "https://www.microsoft.com/ja-jp/store/p/nextgen-reader/9wzdncrfj262" ) foreach ($url in $urls) { try { $request = Invoke-WebRequest $url $body = $request.ParsedHtml $price_node = $body.getElementsByTagName("s") | where { $_.getAttributeNode("class").Value -eq "srv_saleprice" } #<-- ここで例外
――結果。
HRESULT からの例外:0x800A01B6
Internet Explorer(Invoke-WebRequest()
などで内部的に利用されている)がメソッドをサポートしていないときにでるエラーみたい。
解決
getElementsByTagName()
のかわりに IHTMLDocument3_getElementsByTagName()
を用いる。以下のメソッドでも同様のエラーが出るので、適宜読み替える。
getElementsByTagName -> IHTMLDocument3_getElementsByTagName getElementsByName -> IHTMLDocument3_getElementsByName getElementByID -> IHTMLDocument3_getElementByID
なぞ
PowerShell スクリプトからではなく、PowerShell のシェルから getElementsByTagName()
を使うとそのまま通った。よくわからんな……。