WebBrowerコントロールのプロパティの一覧を取得しました。
<#
.SYNOPSIS
WebBrowerコントロールのテスト
.DESCRIPTION
説明
#>
using namespace System.Windows.Forms
param (
[string]$Url = "https://maywork.net/test/ua.php"
)
function Main
{
param (
$url
)
$form = [Form]::new()
$wb = [WebBrowser]::new() | % {
$_.Dock = [DockStyle]::Fill
$_
}
$wb.add_DocumentCompleted({
Write-Host "DocumentCompletedイベント"
Write-Host "プロパティの一覧"
Write-Host ("AllowNavigation:{0}" -f $wb.AllowNavigation) # True
Write-Host ("AllowWebBrowserDrop:{0}" -f $wb.AllowWebBrowserDrop) # True
Write-Host ("CanGoBack:{0}" -f $wb.CanGoBack) # False
Write-Host ("CanGoForward:{0}" -f $wb.CanGoForward) # False
Write-Host ("DefaultSize:{0}" -f $wb.DefaultSize) # null
Write-Host ("Document:{0}" -f $wb.Document) # System.Windows.Forms.HtmlDocument
Write-Host ("DocumentStream:{0}" -f $wb.DocumentStream) # System.IO.MemoryStream
Write-Host ("DocumentText:{0}" -f $wb.DocumentText) # <!DOCTYPE html...
Write-Host ("DocumentTitle:{0}" -f $wb.DocumentTitle) # ユーザーエージェント
Write-Host ("DocumentType:{0}" -f $wb.DocumentType) # HTML ドキュメント
Write-Host ("EncryptionLevel:{0}" -f $wb.EncryptionLevel) # Bit128
Write-Host ("Focused:{0}" -f $wb.Focused) # True
Write-Host ("IsBusy:{0}" -f $wb.IsBusy) # False
Write-Host ("IsOffline:{0}" -f $wb.IsOffline) # False
Write-Host ("IsWebBrowserContextMenuEnabled:{0}" -f $wb.IsWebBrowserContextMenuEnabled) # True
Write-Host ("ObjectForScripting:{0}" -f $wb.ObjectForScripting) # null
Write-Host ("ReadyState:{0}" -f $wb.ReadyState) # Complete
Write-Host ("ScriptErrorsSuppressed:{0}" -f $wb.ScriptErrorsSuppressed) # False
Write-Host ("ScrollBarsEnabled:{0}" -f $wb.ScrollBarsEnabled) # True
Write-Host ("StatusText:{0}" -f $wb.StatusText) # 完了
Write-Host ("Url:{0}" -f $wb.Url) # https://maywork.net/test/ua.php
Write-Host ("Version:{0}" -f $wb.Version) # 11.0.18362.836
Write-Host ("WebBrowserShortcutsEnabled:{0}" -f $wb.WebBrowserShortcutsEnabled) # True
})
$form.Controls.Add($wb)
$form.Add_Load({
$wb.Navigate([Uri]::new($url))
})
[Application]::run($form)
}
Main $Url
結果
DocumentCompletedイベント
プロパティの一覧
AllowNavigation:True
AllowWebBrowserDrop:True
CanGoBack:False
CanGoForward:False
DefaultSize:
Document:System.Windows.Forms.HtmlDocument
DocumentStream:System.IO.MemoryStream
DocumentText:<!DOCTYPE html>
<html lang="ja">
<head>
<title>ユーザーエージェント</title>
</head>
<body>
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; Win64; x64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)</body>
</html>
DocumentTitle:ユーザーエージェント
DocumentType:HTML ドキュメント
EncryptionLevel:Bit128
Focused:True
IsBusy:False
IsOffline:False
IsWebBrowserContextMenuEnabled:True
ObjectForScripting:
ReadyState:Complete
ScriptErrorsSuppressed:False
ScrollBarsEnabled:True
StatusText:完了
Url:https://maywork.net/test/ua.php
Version:11.0.18362.836
WebBrowserShortcutsEnabled:True
DocumentCompletedイベントのタイミングで実行しています。
なかなか興味深いプロパティがあります。
Documentプロパティあたりを使ってスクレイピングなど出来そうですが、気になったのはDocumentStreamです。
System.IO.MemoryStreamが返ってきますのでこのストリームを調べてみます。
<#
.SYNOPSIS
WebBrowerコントロールのDocumentStream
.DESCRIPTION
説明
#>
using namespace System.Windows.Forms
param (
[string]$Url = "https://maywork.net/test/ua.php"
)
function Main
{
param (
$url
)
$form = [Form]::new()
$wb = [WebBrowser]::new() | % {
$_.Dock = [DockStyle]::Fill
$_
}
$wb.add_DocumentCompleted({
$ds = $wb.DocumentStream
$fs = [System.IO.FileStream]::new(".\WebBrowser3.txt",
[System.IO.FileMode]::Create,
[System.IO.FileAccess]::Write
)
$bw = [System.IO.BinaryWriter]::new($fs)
$br = [System.IO.BinaryReader]::new($ds)
$buf = $br.ReadBytes(8192)
while ($buf.Count -gt 0) {
$bw.Write($buf)
$buf = $br.ReadBytes(8192)
}
$br.Dispose()
$bw.Dispose()
$fs.Dispose()
})
$form.Controls.Add($wb)
$form.Add_Load({
$wb.Navigate([Uri]::new($url))
})
[Application]::run($form)
}
Main $Url
ストリームをbyte配列で読みだしてローカルファイルに書き出してみたところhtmlが保存されていました。
urlを画像ファイルを指定すると画像ファイルがダウンロードされるのではと期待しましたが、結果はHTMLでした。
HTMLのみが相手であればDocumentTextのプロパティで文字列として取り扱ったほうが何かと都合がよさそうです。
コメント