アプリ版:「スタンプのみでお礼する」機能のリリースについて

VB .Net(2008)のWebRequestでHPのページの値を取得するものを作成しているのですが、Javascriptが表示する部分の値が取得出来ません。
Javascriptが動的に挿入する値を取得する方法はあるでしょうか?

よろしくお願いします。

A 回答 (2件)

こんにちは




WebBrowserコントロールを使うとjavascriptを自由に実行して、値を取得できますが WebBrowserコントロールが使えない場合は少し時間がかかりますね。



WebBrowserコントロールを使ったサンプルです。


下記のhtmlから値を取得する場合です。

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
<form name="js">
<input type ="text"id="n1" name="t1" value="" />
<input type="text" id="n2" name="t2" value="" />
<input type="button" id="n3" name="b" value="値" onclick="st()"/>
</form>
<script type="text/javascript">
function st() {
document.js.t1.value = "テスト1"
document.js.t2.value = "テスト2"
}
</script>
</body>
</html>



#簡単にするために各inputにidを付けていますので、idを手がかりにInvokeMember("click")でボタンをクリックしてjavascriptを実行します。

#input type="text"に値が表示されますので、GetAttribute("value")でinputの値を取得します。

#idの値を手がかりにしてinputの値を取得してListBox1に表示します。



Public Class Form1
Dim ur As String = "http://~~~~l"
Private Sub f() Handles MyBase.Shown
WebBrowser1.Navigate(ur)
WebBrowser1.Visible = False 'WebBrowser1を非表示にする
End Sub

Private Sub WebBrowser1_DocumentCompleted(sender As System.Object, e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
ListBox1.Items.Clear()
Dim txt1 As String
Dim txt2 As String
If sender.url.ToString = e.Url.ToString Then
'ボタンをクリックしてjavascriptを実行
WebBrowser1.Document.GetElementById("n3").InvokeMember("click")
'inputに値を入力
txt1 = WebBrowser1.Document.GetElementById("n1").GetAttribute("value")
txt2 = WebBrowser1.Document.GetElementById("n2").GetAttribute("value")

Dim wre As Net.WebRequest = Net.WebRequest.Create(ur)
Dim wrs As Net.WebResponse = wre.GetResponse()
Dim st As IO.Stream = wrs.GetResponseStream()
Dim reader As New System.IO.StreamReader(st)
Dim line As String
line = reader.ReadLine
Do Until IsNothing(line)
'idの値を手がかりにしてinputの値を取得してListBox1に表示
If line.Contains("id=""n1""") Then
ListBox1.Items.Add(txt1)
ElseIf line.Contains("id=""n2""") Then
ListBox1.Items.Add(txt2)
End If
line = reader.ReadLine
Loop
reader.Close()
End If
End Sub
End Class
「WebRequestでJavascrip」の回答画像2
    • good
    • 0
この回答へのお礼

質問の書き方が悪かったようですいません。
javascriptがタイマーで定期的に自動更新する値を取得したいという事だったのです。
この場合WebBrowserを使えばもちろん取得できます。
しかしWebBrowserは遅くて重いため使いたくなかったので・・・
ありがとうございました。

お礼日時:2013/04/22 14:38

WebBrowserコントロールを使う



参考URL:http://www.atmarkit.co.jp/fdotnet/dotnettips/687 …
    • good
    • 0
この回答へのお礼

やはり webrequest や webclient では無理なようですね・・・ありがとうございました。

お礼日時:2013/04/22 14:32

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!