본문 바로가기
VBA/엑사남_심화방

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

by 일등미노왕국 2022. 12. 30.

원래 계획은 시리즈로

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 엑사남들이 되길 희망한다.

댓글