PowerShell:スクレイピングすると“HRESULT からの例外:0x800A01B6”が発生する

執筆日時:

メインに使っているデスクトップ端末を Windows 10 Creators Update へアップデートしたのだけど、

blog.daruyanagi.jp

以前に作った 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

なぞ

f:id:daruyanagi:20170430154724p:plain

PowerShell スクリプトからではなく、PowerShell のシェルから getElementsByTagName() を使うとそのまま通った。よくわからんな……。