tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルWebページの取得
記事No14781
投稿日: 2010/06/29(Tue) 15:52
投稿者nobu
環境: VB6 SP6  QS: WinXp

1.http://www.clublog.org/expeditions.php のページを表示すると
  Callsign の欄に 5N7M があります。
2.このリンクをクリックして表示されたページの文字入力エリアに
  JA1 と入力して「Find QSO」ボタンをクリックします。
3.表が表示されます。この表の下側の
  「Leaderboard: Click for the top 100 band/slots stations in CQ zone 25 or JAPAN or in AS 」の
   「JAPAN」のクリックします。
4.「Top 100 band/slots in JAPAN * 」の表が表示されます。
5.「1 JA4DND 11 」 の「11」のリンクをクリックすると
   赤枡、緑の枡に白色のレ点の表が表示されます。
   これは順位1から順に100まであります。

上記の4と5を手動では無くてソフトで取得したいのですが、どうしたら出来るかご指導を
お願いします。

今までにはURLを指定してWebページを取得する事はやっていますが
今回の場合にはリンク先をクリックしてもどれも
http://www.clublog.org/charts/?c=5N7M# だったりでWebページを取得が
出来なくています。

[ツリー表示へ]
タイトルRe: Webページの取得
記事No14782
投稿日: 2010/06/29(Tue) 20:50
投稿者魔界の仮面弁士
> 上記の4と5を手動では無くてソフトで取得したいのですが、

3,4,5 ではなく、4,5だけなのですね?

3 までは出来ているのであれば、あとはこんな感じ。

 ' #4
 Private Sub Command4_Click()
  WebBrowser1.Navigate2 "javascript:sendRequest2('JA4DND')"
 End Sub

 ' #5
 Private Sub Command5_Click()
  Dim tbl As Object, row As Object, cell As Object
  Set tbl = WebBrowser1.Document.getElementById("thegrid")
  For Each row In tbl.rows
   For Each cell In row.cells
    Debug.Print Tab(cell.cellIndex * 8);
    If cell.tagName = "TH" Then
     Debug.Print cell.innerText;
    Else
     Debug.Print cell.currentStyle.backgroundColor;
    End If
   Next
   Debug.Print
  Next
 End Sub



=== 出力結果の例 ===
       6m      10m     12m     15m     17m     20m     30m     40m     80m     160m
PH     red     red     red     green   red     green   #eee    red     red     red
CW     #eee    red     green   green   green   green   green   green   green   green
RTTY   #eee    #eee    #eee    #eee    #eee    green   #eee    #eee    #eee    #eee

[ツリー表示へ]
タイトルRe^2: Webページの取得
記事No14783
投稿日: 2010/06/29(Tue) 21:03
投稿者nobu
魔界の仮面弁士さん、何時もありがとうございます。

> > 上記の4と5を手動では無くてソフトで取得したいのですが、
> 3,4,5 ではなく、4,5だけなのですね?

すみません、3もです。
最初のページから「5N7M」などのCallsigh一覧は取得できているので
各Callsighについて3,4、5を取得したいです。


> 3 までは出来ているのであれば、あとは

3もまだです。

>  Private Sub Command1_Click()
>   WebBrowser1.Navigate2 "javascript:sendRequest2('JA4DND')"
>  End Sub
> でいけるかと。

これは明日試させていただきます。

[ツリー表示へ]
タイトルRe^3: Webページの取得
記事No14784
投稿日: 2010/06/29(Tue) 21:20
投稿者nobu
魔界の仮面弁士さん、ありがとうございます。

VB6でWebBrowser1 に「5N7M」のページを表示。
WebBrowser1 にて手動で「JA1」を入力し手動で「Find QSO」ボタンをクリック。
「Top 100 band/slots in JAPAN * 」の表が表示された状態で教えていただいた
下記を実行すると赤枡、緑の枡に白色のレ点の表が表示されます。

 Private Sub Command1_Click()
  WebBrowser1.Navigate2 "javascript:sendRequest2('JA4DND')"
 End Sub

このページを保存するには
    WebBrowser1.Navigate2 "javascript:sendRequest2('JA4DND')"
    DownloadFile = "javascript:sendRequest2('JA4DND')"
    SaveFileName = strPath & "JA4DND.htm"
    ret = URLDownloadToFile(0, DownloadFile, SaveFileName, 0, 0)
...では出来ないようですがどうすれば保存できるでしょうか?
それと2と3についてはどう言うコードで可能なのでしょうか?

[ツリー表示へ]
タイトルRe^4: Webページの取得
記事No14787
投稿日: 2010/06/29(Tue) 21:56
投稿者魔界の仮面弁士
> ...では出来ないようですがどうすれば保存できるでしょうか?
JavaScript で構築された画面なので、URLDownloadToFile で直接保存する事はできません。

一応、IPersistStreamInit や IPersistFile 方式も試してみましたが、
「指定されたファイルが見つかりません。」のエラーになってしまうようです。

先の Command5_Click のコードを参考に、自前で HTML の内容を解析して
ファイル化するための処理を記述してみてください。


> それと2と3についてはどう言うコードで可能なのでしょうか?
結局、全部になりそうな雰囲気…。

 ' #1
 Private Sub Command1_Click()
  WebBrowser1.Navigate "http://www.clublog.org/expeditions/5N7M"
 End Sub

 ' #2
 Private Sub Command2_Click()
  WebBrowser1.Document.getElementById("hisCall").Value = "JA1"
  WebBrowser1.Navigate "javascript:sendRequest()"
 End Sub

 ' #3
 ' No14785 の投稿を参照

 ' #4
 ' No14782 の投稿を参照

 ' #5
 ' No14782 の投稿を参照

[ツリー表示へ]
タイトルRe^5: Webページの取得
記事No14789
投稿日: 2010/06/29(Tue) 22:09
投稿者nobu
魔界の仮面弁士 さん、素早い回答を大変ありがとうございました。

> 先の Command5_Click のコードを参考に、自前で HTML の内容を解析して
> ファイル化するための処理を記述してみてください。

先の #5 === 出力結果の例 === は上手く保存できました。

順位1から順位100迄の表の取得は明日トライして見ます。

[ツリー表示へ]
タイトルRe^3: Webページの取得
記事No14785
投稿日: 2010/06/29(Tue) 21:24
投稿者魔界の仮面弁士
>>> 3.表が表示されます。この表の下側の
>>>   「Leaderboard: Click for the top 100 band/slots stations in CQ zone 25 or JAPAN or in AS 」の
>>>    「JAPAN」のクリックします。

これらのリンクは、クリック時に Javascript コードを実行するようですね。

『in CQ zone [25]』の部分は、
 WebBrowser1.Navigate "javascript:getLeaderboard('cqz','JA1')"
ですし、『or [JAPAN]』の部分は
 WebBrowser1.Navigate "javascript:getLeaderboard('dxcc','JA1')"
で、最後の『or in [AS]』のリンクが
 WebBrowser1.Navigate "javascript:getLeaderboard('continent','JA1')"
のようです。


> > 3 までは出来ているのであれば、あとは
> 3もまだです。

 ' #3
 Private Sub Command3_Click()
    WebBrowser1.Navigate "javascript:getLeaderboard('dxcc','JA1')"
 End Sub

[ツリー表示へ]
タイトルRe^4: Webページの取得
記事No14786
投稿日: 2010/06/29(Tue) 21:50
投稿者nobu
魔界の仮面弁士さん、すばやいご指導、大変ありがとうございます。

>  WebBrowser1.Navigate "javascript:getLeaderboard('cqz','JA1')"
>  WebBrowser1.Navigate "javascript:getLeaderboard('dxcc','JA1')"      
>  WebBrowser1.Navigate "javascript:getLeaderboard('continent','JA1')"   ’ #3
>  WebBrowser1.Navigate2 "javascript:sendRequest2('JA4DND')"             ’ #5

上記はいずれも上手く WebBrowser1 上に表示出来ました。
#3と#5のページの取得はどうすれば出来るのでしょうか?
ページの保存が出来れば今回の目的は達成出来そうです。
教えて頂くだけで済みませんが引き続きお願い出来れば幸いです。

[ツリー表示へ]
タイトルRe^5: Webページの取得
記事No14788
投稿日: 2010/06/29(Tue) 22:06
投稿者魔界の仮面弁士
> 教えて頂くだけで済みませんが引き続きお願い出来れば幸いです。

このまま続けてしまうと、このサイトの「初めにお読みください」にある
   [コードを書いて下さい]まがいの質問はご遠慮下さい
の注意事項に触れてしまいます。(^_^;)
http://hanatyan.sakura.ne.jp/hazimeni.htm#keijiban


ここはプログラミング作成依頼の場所ではありませんし、
一から十まで掲示板で教える事は流石に無理がありますから、
nobu さん自身がどこまで出来ているのか、具体的な情報を提示してください。
そうすれば、それぞれの分からない点に対してアドバイスを出せるかも知れません。

・どこまで調べていて、どの部分が分からないのか。
・どのような技術資料を探しているのか。
・どのようなコードを書いていて、その結果どうなってしまうのか。
・コーディングにあたり、どのような点で悩んでいるのか。

[ツリー表示へ]
タイトルRe^2: Webページの取得
記事No14790
投稿日: 2010/06/30(Wed) 19:18
投稿者nobu
こんにちは。
昨日は素早い回答をありがとうございました。

#4 を連続に取得しようとしていますが今回は JavaScript だからでしょうか
Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
は試しましたが使えないようですね。

下記のように手動で取得した Callsign が記載のファイルを読み込み
連続して#4の表の取得をしたいのですが表が表示前に保存処理に入ってしまうようで
「エラーコード91 オブジェクト変数または With ブロック変数が設定されていません。 」が
出てしまいます。
表示完了まで待ってから保存するにはどうすれば良いのでしょうか?
ヒントや参考になる資料はあるでしょうか?
Webで探しても見ましたがまだ見つけ出していません。

Private Sub Command11_Click()

Label1.Caption = ""
Label1.Refresh

Open strPath & "5N7M_Results.txt" For Output As #f_o
Open strPath & "5N7M_List.txt" For Input As #f_i
Do
    Input #f_i, tmp1, tmp2, tmp3
        Print #f_o, Trim$(tmp1)
        URL = "javascript:sendRequest2('" & Trim$(tmp1) & "')"
        WebBrowser1.Navigate URL
        Command11_sub
        Sleep 1000
Loop Until EOF(f_i)
    
Close #f_i
Close #f_o

Label1.Caption = "終 了"

End Sub

Private Sub Command11_sub()

  Dim tbl As Object, row As Object, cell As Object
    
    Set tbl = Nothing
    Set tbl = WebBrowser1.Document.getElementById("thegrid")
    
For i = 1 To 50
    If tbl Is Nothing Then
    Else
        For Each row In tbl.rows
            For Each cell In row.cells
                Print #f_o, Tab(cell.cellIndex * 8);
                If cell.tagName = "TH" Then
                    Print #f_o, cell.innerText;
                Else
                    Print #f_o, cell.currentStyle.backgroundColor;
                End If
            Next
                Print #f_o, ""
        Next
        Exit For
    End If
        Sleep 1000
Next i

Set tbl = Nothing

End Sub

[ツリー表示へ]