Excel (VBA)

Excel VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 8.1 Pro : Excel 2013)
VBAでSeleniumを使ったスクレイピング
投稿日時: 21/08/29 05:50:12
投稿者: sucer

https://kabutan.jp/stock/finance?code=1301のページのSub ie_test_Document_All_TagName_TR_TD()と同様のことをChromeのSeleniumを
 
使った方法だとどういうコードを書いたら良いのでしょうか?
 
 
 
Sub ie_test_Document_All_TagName_TR_TD()
 
 '参照先 http://www.ken3.org/cgi-bin/group/vba_ie_document.asp
 
    Dim x As Integer, y As Integer '列と行カウンター
     
    Dim objIE As Object 'IEオブジェクト参照用
    Dim objTAG As Object '1つ1つ タグのオブジェクトを入れる
    Dim strTNAME As String 'タグの名前を保存する
     
    Set objIE = CreateObject("InternetExplorer.application") 'IEのオブジェクトを作る
    objIE.Visible = True
 
     
    objIE.Navigate "https://kabutan.jp/stock/finance?code=1301"
 
    Do While objIE.ReadyState <> 4
     DoEvents
    Loop
 
 
    '新規のブックを追加して、.InnerTEXTを吐き出す
    Workbooks.Add '新規ブックを追加
     
    y = 0 '行カウンターを初期化(はじめの改行で+1するので0から)
    x = 0 '列カウンターを初期化(TR 改行時に初期化するのでいらないんだけど)
     
    'Documentから.TagNameでTR TD THを判断して テキスト(.InnerText)を書き出す
    For Each objTAG In objIE.Document.all
         
        strTNAME = objTAG.TagName 'タグの名前を変数へ保存
         
        If strTNAME = "TR" Then 'TR行の開始なら
            y = y + 1 '行開始なので 行カウンターを+1
            x = 0 '列を0(頭)初期化
        End If
             
        If strTNAME = "TH" Or strTNAME = "TD" Then 'TH見出し TDデータ
            x = x + 1 '列カウンターを+1
            Cells(y, x) = "'" & objTAG.InnerText '.InnerTextをセットする
        End If
         
    Next
 
    '抜き出し処理が終わったので、普通はIEを.Quitで閉じる
    'objIE.Quit 'コメントにして処理しない(残しておいた方がテスト時は楽です)
    'Set objIE = Nothing
 
End Sub
 
 
 
以前に投稿して各サイトを調べたのですが良い方法が見つかりませんでした。
 
 
 
Sub test2()
 
  'Selenium.chmのIEDriver Class参照
 
    Dim driver As Selenium.WebDriver
    Dim SHGetData As Worksheet
     
    Dim url As String
    Dim data
 
    url = "https://kabutan.jp/stock/finance?code=1301"
 
    Set driver = New Selenium.WebDriver
    driver.Start "chrome", url
    driver.Get url
     
    Workbooks.Add
    Set SHGetData = ActiveWorkbook.Worksheets("sheet1")
 
     
    'テーブル内容を指定セル範囲に書き込む
    driver.FindElementsByTag("TH").Values.ToExcel SHGetData
     
    driver.FindElementsByTag("TD").Values.ToExcel SHGetData
 
    driver.Quit
     
     
    Set driver = Nothing
    Set SHGetData = Nothing
     
     
End Sub
 
のコードしか書けなかったのですが
 
For Each objTAG In objIE.Document.all
         
        strTNAME = objTAG.TagName 'タグの名前を変数へ保存
         
        If strTNAME = "TR" Then 'TR行の開始なら
            y = y + 1 '行開始なので 行カウンターを+1
            x = 0 '列を0(頭)初期化
        End If
             
        If strTNAME = "TH" Or strTNAME = "TD" Then 'TH見出し TDデータ
            x = x + 1 '列カウンターを+1
            Cells(y, x) = "'" & objTAG.InnerText '.InnerTextをセットする
        End If
         
Next

の部分はどういうコードを書いたら良いでしょうか?
 
分かる方がおられましたら教えてください。
 
EdgeをIEモードで動かしてみたのですがログイン状態を維持できないみたいなのでSeleniumを使ったコードを作成しておきたいと思ってます。
 
よろしくお願いします。
 

回答
投稿日時: 21/09/13 10:46:57
投稿者: シミスケ

以下のような感じでどうでしょうか。
当方で動作検証していませんが、ご参考までに。
 
 
For Each objTAG In drvr.FindElementsByCss("*")
          
        strTNAME = objTAG.tagName 'タグの名前を変数へ保存
          
        If strTNAME = "tr" Then 'TR行の開始なら
            y = y + 1 '行開始なので 行カウンターを+1
            x = 0 '列を0(頭)初期化
        End If
              
        If strTNAME = "th" Or strTNAME = "td" Then 'TH見出し TDデータ
            x = x + 1 '列カウンターを+1
            Cells(y, x) = "'" & objTAG.Text '.InnerTextをセットする
        End If
          
Next

トピックに返信