본문 바로가기

programmer/python

[Crawling] webdriver로 새로운 탭 열고 데이터 수집하기

가끔 크롤링 하다보면 테이블 행 a tag에 링크가 있고 그 링크 안의 데이터를 수집해서 다시 원본 탭으로 돌아오고 싶을 때가 있다.

그럴 때 쓰기 좋은 스크립트를 작성하였으니 참고 하고 입맛에 맏게 수정해서 쓰기 바란다.

새로운 탭 열고 func 수행 후 탭 닫고 복귀

from selenium import webdriver
import time

driver =  webdriver.Chrome('./chromedriver.exe', options=options)
driver.get('https://www.google.com/')

def openNewTabNExecuteFunction(driver, tabIndex, url, func):
    
    # Open a new window
    driver.execute_script(f"window.open('{url}','_blank')")
    # Switch to the new window
    driver.switch_to.window(driver.window_handles[tabIndex])
    # time to sleep
    result = func(driver, url)
    driver.implicitly_wait(3)
    # time.sleep(1)
    # Close new tab
    driver.close()
    # Switching to old tab
    driver.switch_to.window(driver.window_handles[0])
    
    return result
openNewTabNExecuteFunction(driver, 1, "https://www.google.com", getBranchName)

 

func 예제

from selenium.webdriver.common.by import By
'''
element(단일) , elements(복수)	설명
By.ID	태그의 id값으로 추출
By.NAME	태그의 name값으로 추출
By.XPATH	태그의 경로로 추출
By.LINK_TEXT	링크 텍스트값으로 추출
By.PARTIAL_LINK_TEXT	링크 텍스트의 자식 텍스트 값을 추출
By.TAG_NAME	태그 이름으로 추출
By.CLASS_NAME	태그의 클래스명으로 추출
By.CSS_SELECTOR	css선택자로 추출
'''
def getBranchName(driver, _url):
    try:
        
        rText = ''
        driver.implicitly_wait(5)
        driver.get(_url)
        driver.implicitly_wait(5)
		#특정 ID 명을 찾아 그 값을 리턴
        element = driver.find_element(By.ID,'SIvCob')
        if not element:
            print('no element')
        else:
            # print(element.text)
            rText = element.text
            
        return rText
    except:
        print("ERROR MESSAGE: NO ELEMENT FOUND")
반응형
사업자 정보 표시
라울앤알바 | 장수호 | 서울특별시 관악구 봉천로 13나길 58-10, 404호(봉천동) | 사업자 등록번호 : 363-72-00290 | TEL : 010-5790-0933 | Mail : shjang@raulnalba.com | 통신판매신고번호 : 2020-서울관악-0892호 | 사이버몰의 이용약관 바로가기

'programmer > python' 카테고리의 다른 글

[conda] jupyterlab - git extension 설치 방법  (0) 2022.04.10
python to elasticsearch  (0) 2022.03.03
Python DateTime 변환(날짜 양식 변환)  (1) 2022.02.22
[docker] jupyter-notebook 설치  (0) 2022.02.01
Telegram API 사용해 보기  (0) 2022.01.17