메뉴
미해결 엑셀2019윈도우10

vba 크롤링, 버튼 누를때 리퀘스트 따기

박
7월 16일 조회 947

안녕하세요,


아래와같이 이전에 질문을 올렸었는데

https://www.oppadu.com/community/question/?mod=document&pageid=1&uid=72208&execute_uid=72208

셀레니움이 데이터 가져오는게 너무 느려서


다른 방식이 없는지 궁금합니다.


 

https://finance.yahoo.com/quote/CROX/financials/ 사이트에서

Annual / Quarterly 버튼을 누를때

발생하는 리퀘스트를 분석해서 winhttp로 던지고, 리턴을 받고싶은데요


리퀘스트를 어떻게 코드에 적용해야하는지 모르겠습니다..

 


 

https://finance.yahoo.com/quote/CROX/financials/

해당 사이트에서 income statement의 Annual 탭에서

row svelte-1ezv2n5라는 클래스를 불러와서

테이블에 있는 데이터 break down / ttm / 12/31/2023 / 12/31/2022 ...쭉쭉 뽑아낼 수 있는 상황인데요

Annual 이 아닌 Quarterly탭을 클릭했을때의 바뀌는 데이터를 접근해보고 싶은데

문제가.. 클래스 네임이 Annual과 Quarterly 양쪽 모두 row svelte-1ezv2n5로 같습니다.

Annual 과 Quarterly버튼을 누를 때

table index의 값이 바뀌면서. table에서 나오는 데이터가 바뀌고 있는데요

클래스 네임은 동일해서 vba에서 추출할때 어떻게 접근해야하는지 모르겠습니다..

셀레니움으로 버튼을 클릭했을 때 접근가능해보이긴하는데


셀레니움 속도가 느려서 winhttp로 구현해보고 싶습니다.

Quarterly에 어떻게 접근하는게 좋을지 고견 부탁드리겠습니다.


Quarterly버튼을 클릭하고 나서의 http를 어떻게 접근할 수 있을까요?

 

미리 감사합니다

​

​

댓글 1

원
원조백수 7월 16일
SeliniumBasic을 이용해서 WebDriver를 구동해서 사용할 때에
특정 element에서 click하고 조회되는 내용을 스크랩하는 예입니다.
    With WD
        If vUser(3) = "AA" Then .Get "https://www.someserver.co.kr/ca_title.php" Else GoTo EXIT_RUN
        On Error GoTo 0
        .FindElementById("s_class").AsSelect.SelectByText (IIf(vUser(6) = "전체", vUser(5), vUser(6))) 
        .FindElementByName("special").AsSelect.SelectByText (vUser(7)) 
        .FindElementByName("scale").AsSelect.SelectByText ("100") 
        Set oNODEs = .FindElementsByClass("btn_box_s")
        For Each oNODE In oNODEs
          If oNODE.TagName = "input" Then oNODE.Click
        Next oNODE
        
        On Error Resume Next 
        Set oNODE = .FindElementByClass("no_print")  
        
        Set oNODE = .FindElementByClass("f13") 
        iCnt = oNODE.Text
        iCnt = Replace(Mid(iCnt, InStr(1, iCnt, ":") + 1), "건)", "")
        iCnt = CLng(iCnt)
        
        ReDim vD(1 To iCnt + 1, 1 To 14) 
        If iCnt > 100 Then
            Set oNODE = .FindElementByClass("pagn")
            sHref = oNODE.FindElementByTag("a").Attribute("href")
        End If
        
        Do While p < iCnt
            ChangeProgress Int(p * 100 / iCnt)
            ChangeProgressDescription p & "/" & iCnt & " " & vUser(3) & "자료를 조회중입니다."
            
            Set trs = .FindElementsById("list_body")(1).FindElementsByTag("tr")
            R = 0
            For Each tr In trs
                R = R + 1
                c = 0
                ChangeProgress Int((p + R) * 100 / iCnt)
                ChangeProgressDescription p + R & "/" & iCnt & " " & vUser(3) & "자료를 조회중입니다."
                ReDim vT(1 To 8)
                For Each td In tr.FindElementsByTag("td")
                    c = c + 1
                    vT(c) = td.Text 
                Next td
                On Error Resume Next
                vD(p + R, 1) = vUser(3)
                vD(p + R, 2) = Split(vT(3), Chr(10))(1)
                vD(p + R, 3) = Split(vT(3), Chr(10))(0)
                vD(p + R, 4) = Split(vT(4), Chr(10))(0)
                vD(p + R, 5) = Trim(Split(REGEXEXTRACT(vT(4), "\d*,*\d*.\d*㎡"), "㎡")(0))   '"\s\d*.\d*㎡"
                vD(p + R, 6) = Split(vT(5), Chr(10))(0)
                vD(p + R, 7) = Split(vT(5), Chr(10))(1)
                vD(p + R, 8) = Replace(vT(6), Chr(10), "")
                On Error GoTo 0
            Next tr
            p = p + 100
            If p < iCnt Then sHref = Left(sHref, InStr(1, sHref, "start=", vbTextCompare) + 5) & p
            If p < iCnt Then .Get sHref
            Range("A10").Resize(UBound(vD, 1), UBound(vD, 2)) = vD
        Loop
    End With

 

질문답변 게시판의 최근 글

스크랩 완료