none
htmlソースのダウンロード RRS feed

  • 質問

  • こんにちは。

    あるWeb pageのhtml ソースをファイルにダウンロードしたいのですがうまくいきません。

    $url = "http://www.cnn.com"
    $ie=new-object -com internetexplorer.application
    $ie.visible=$false
    $ie.navigate($url)
    while($ie.busy) {start-sleep 1}

    # 以下は成功
    $webClient = new-object System.Net.WebClient
    $webClient.DownloadString($url) | Out-File -FilePath d:\work\test.html

    #以下は失敗
    $source = $ie.Document.documentElement.outerHTML
    Out-File -InputObject $source -FilePath d:\work\test.html
    作成されたtest.htmlの中身:
    ÿþ


    $sourceはnullのようです。

    Out-Fileの使い方が間違っているのでしょうか?
    OSはVista + .NET 3.5です。





    2008年2月10日 7:37

回答

すべての返信

  • >># 以下は成功
    >>$webClient = new-object System.Net.WebClient
    >>$webClient.DownloadString($url) | Out-File -FilePath d:\work\test.html

     

    成功しているのに何が問題なのでしょうか?

     

    ちなみにwebClietを使用して保存する方法には、下記のような方法もあります。

    #ダウンロードする

    $filepath = "d:\work\test.html"
    $webClient.DownloadFile($url,$filePath)


    HIRO's.NET http://hiro.wankuma.com/
    HIRO's.NET Blog http://blogs.wankuma.com/hiro/
    2008年2月11日 5:51
  • HROs-NETさん
    コメントありがとうございます。

    実際のダウンロードしたい$ieはforumでloginが必要です。
    なのでurlを直接使用しない$ieを使用する2番目の方j法が必要なのです


    2008年2月11日 10:36
  • $source = $ie.Document.documentElement.outerHTML

    ではなく

    $source = $ie.document.Body.InnerHTML

    にしたらどうなりますか?



    HIRO's.NET http://hiro.wankuma.com/
    HIRO's.NET Blog http://blogs.wankuma.com/hiro/
    2008年2月12日 0:56
  • こんにちは。

    やってみました。

     

    $url = "http://www.cnn.com"
    $ie=new-object -com internetexplorer.application
    $ie.visible=$FALSE
    $ie.navigate($url)
    while($ie.busy) {start-sleep 1}
    Start-Sleep -Seconds 5
    # $source = $ie.Document.documentElement.innerHTML
    $source = $ie.document.Body.InnerHTML
    Out-File -InputObject $source -FilePath d:\work\test.html

     

    test.htmlには前回と同じ不明な文字2つが入っています。

    2008年2月12日 2:02
  • >$url = "http://www.cnn.com"
    >$ie=new-object -com internetexplorer.application
    >$ie.visible=$FALSE
    >$ie.navigate($url)
    >while($ie.busy) {start-sleep 1}
    >Start-Sleep -Seconds 5
    ># $source = $ie.Document.documentElement.innerHTML
    >$source = $ie.document.Body.InnerHTML
    >Out-File -InputObject $source -FilePath d:\work\test.html

    私のところで実行してみましたが、正常に実行できました。
    不明な文字が保存されることはありませんでした。

    当方のOSは WinXP SP2 です

    HIRO's.NET http://hiro.wankuma.com/
    HIRO's.NET Blog http://blos.wankuma.com/hiro/
    2008年2月12日 3:54
  • HIRO's.NETさんコメントありがとうございます。
    やはりそうでしたか。 Vistaの問題なのかもしれません。
    Googleしてみてもそのような報告が見つからなかったのでVistaの問題ではないのかなと考えていました。
    Vistaのupdateを調査してみます。
    別の質問で$ieがready stateを返さないのもVistaの問題なのかもしれません。
    2008年2月12日 15:34
  • やはりVista/IE7の問題ですね。
    海外のPowerShell Forumでたずねたところコメントがありました。
    http://www.systemscript.com/forumps1us/forum_posts.asp?TID=17&OB=DESC

    http://www.systemscript.com/forumps1us/forum_posts.asp?TID=16&PID=58#58

    この問題があるとVistaでPowerShell+IE7を使えないですね。
    これは解決される可能性はあるのでしょうか?


    2008年2月13日 11:07
  • 解決しました。

    PowerShellを管理者権限で実行すれば正常に動作します。
    2008年2月14日 13:29