VBA/엑사남_심화방

[심화방] VBA_심화_100제 #3 [ 네이버 주식 종목토론방 ]

일등미노왕국 2022. 12. 30. 12:56

원래 계획은 시리즈로

1. 현재가 가져오기

2. 종목 토론방 가져오기

3. 코스피 코스닥 종목과 종목코드 가져오기

4. 종목에 따른 동적인 변화를 이벤트를 통해 크롤링 하는것을 계획했는데, 글이 한두개 밀려서

현재가에서 ~~ 이벤트로 퀀텀 점프를 해버렸다..

연말이라서 정신이 없으니 이해 바란다.

그냥 몇일동안 해야할걸 한방에 보게 되었다 생각하시길...

 

주의 할 것은

평소에는 차트가 가려져 있고

[저가] 밑에 화살표 버튼을 눌러야

비로소 차트가 보이게 된다.

 

이 코드는 숨기기 버튼을 누르고 차트의 일봉 주봉 월봉  중 일봉 차트를 클릭하는 구문이다.

 Sel.FindElementByCss("#btn_close").Click
 Sel.FindElementByCss("#chart_area > div.chart > div > dl.bar > dd > ul > li.day > a").Click

더보기
Sub 주식토론방()

    Dim Sel As New Selenium.WebDriver
    Dim strurl$
    Dim rngX As Range: Set rngX = [c20]
    Dim rngP As Range: Set rngP = [c5:h16]
    Dim Nodes As Object
    Dim Obj As Object
    Dim rngall As Range: Set rngall = [c20].CurrentRegion
    Dim Chart$
   
    Dim i&
    
    Haja_Clear rngall                                                 '= 초기화
    
    Application.ScreenUpdating = False
       
        strurl = "https://finance.naver.com/item/board.naver?code=" & Sheets("종목토론방").[e3]

         Sel.AddArgument "--headless"                                  '= 헤드리스 모드
         Sel.Start "chrome"                                            '= 크롬으로 진행
         Sel.Get strurl
         
         Sel.FindElementByCss("#btn_close").Click
         Sel.FindElementByCss("#chart_area > div.chart > div > dl.bar > dd > ul > li.day > a").Click
         
         Set Nodes = Sel.FindElementByCss(".no_today>em")               '= 현재가
         [d1] = Replace(Nodes.Text, Chr(10), "")
         
         Chart = Sel.FindElementByCss("#img_chart_area").Attribute("src")  '= 차트 URL 가져오기
    
         ActiveSheet.Shapes.AddPicture Chart, False, True, rngP.Left, rngP.Top, rngP.Width, rngP.Height + 2
                                                                           '= 차트 삽입
         
       '= 토론방 구문
         Set Nodes = Sel.FindElementsByCss("tbody")(2).FindElementsByCss("tr>td")
   
         For Each Obj In Nodes
          
                If Obj.Text <> "" Then
                   
                     i = i + 1
                     Application.EnableEvents = False  '= 이벤트를 안 끄면 토론방 글들이 출력될때마다
                        rngX(1, i) = Obj.Text          '= 이벤트가 발생하기에 잠시 꺼놓자
                     Application.EnableEvents = True
                    
                End If
           
               If i >= 6 Then Set rngX = rngX.Offset(1): i = 0
            
         
         Next Obj
        '= 토론방 구문
         
            
    Application.ScreenUpdating = True
    
    rngall.HorizontalAlignment = xlCenter
    rngall.Borders.LineStyle = 1
    
  '  MsgBox "주식 토론방 출력을 완료했습니다."
         
End Sub

Function Haja_Clear(rngall As Range)

     Dim Pic As Shape

     rngall.ClearContents
     For Each Pic In ActiveSheet.Shapes

         If InStr(Pic.Name, "Pic") > 0 Then Pic.Delete
    
     Next Pic

End Function

주식토론방.xlsm
0.12MB

더 추가해서 더 똑같이 만들려고 했으나, 같은 작업의 반복이라 여기까지 진행하도록 하겠다...

새해에도 더 멋진 VBA 엑사남들이 되길 희망한다.