だるろぐ

明日できることは、今日しない。

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() を使うとそのまま通った。よくわからんな……。