파이썬 자동화 라이브러리

2023. 2. 9. 19:02코딩/파이썬

프로젝트로 매크로를 만들 일이 생겨서 자동화 관련 라이브러리들을 알아보기로 했다.

보편적으로 많이쓰는게 다음 3가지라고 한다.

1. selenium

2. beautifulsoup

3. urlib

내가 알아본건 pyautogui였는데 이건 간단한 매크로 만들 때 쓰고 웹 브라우저 핸들링까지 고려하면 저 3개가 더 좋다고 선배가 추천해줬다. 우선 오늘은 selenium부터..

 


Selenium

WebDriver를 사용해 브라우저 자동화를 지원하는 라이브러리

공식 홈페이지에 따르면, 각기 다른 브라우저 백엔드를 사용해 cross-borwser과 cross-platform 자동화를 하게 해준다고 한다.

그냥 브라우저에서 정보 수집, 이벤트 제어 등을 쉽게 하게 도와준다고 보면 될 듯하다.


설치

셀레니움을 사용하려면 pip로 라이브러리를 설치하고 사용할 브라우저 별로 드라이버를 설치해야 한다. 

pip install selenium

드라이버들은 공식 홈페이지에 친절하게 나와있다.

https://www.selenium.dev/documentation/webdriver/getting_started/install_drivers/

 

Install browser drivers

Setting up your system to allow a browser to be automated.

www.selenium.dev

살펴보면 Safari는 기본적으로 Selenium에 빌트인 되어 따로 설치할 필요가 없다. 

하지만 나는 Chrome 사용할 것이기 때문에.. Chrome을 위한 드라이버를 다운한다. 

Chrome 버전에 맞는 드라이버를 다운해야 하므로 Chrome에서 설정-Chrome정보에서 버전을 확인한 후 위 주소에서 해당하는 드라이버를 받으면 된다.

from selenium import webdriver
driver = webdriver.Chrom("C:/workspace/python/driver/chromedriver.exe")

webdriver를 임포트하고 드라이버가 설치된 경로를 설정해준다. 코드를 실행했을 때 Chrome 브라우저 창이 뜨면 성공!

하지만.. 이렇게 직접 드라이버를 다운받으면 크롬이 업데이트될 때마다 드라이버도 새로 받아줘야 하기 때문에 매우 번거롭다. 그래서 아래의 코드를 사용해 자동으로 현재 브라우저 버전을 체크해 자동으로 드라이버를 다운받게 했다.

pip install webdriver-manager
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager

chrome_options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service = Service(ChromeDriverManager().install()), options=chrome_options)

버전을 확인하고 알아서 드라이버를 설치하는 것을 볼 수 있다.

근데 저렇게만 하면 프로그램이 수행되고 종료될 때 셀레니움도 함께 종료돼서 창이 바로 닫히게 된다.

 

해결방법

함수화시켜서 함수가 종료되지 않게 한다.

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager

def set_chrome():
    chrome_options = webdriver.ChromeOptions()
    driver = webdriver.Chrome(service = Service(ChromeDriverManager().install()), options=chrome_options)

    while(True):
        pass

set_chrome()

또는 함수화시키기 싫다면 그냥 코드 밑에 while부분을 써주면 된다. 이렇게 하면 driver.quit( )이나 driver.close( )를 사용하지 않는 이상 창이 계속 유지된다. (두 함수의 차이점은 quit은 열려있는 모든 창 닫기, close는 현재 창만 닫기)

실행하면 이렇게 빈 창이 하나 뜬다. 이제 셀레니움을 사용할 준비가 다 됐다.

테스트로 실행하면 특정 페이지로 이동하게끔 해봤다.

driver.get("https://sec-monster.tistory.com")

코드를 실행시키면 창이 뜨면서 내 블로그로 바로 이동한다.

 
 

'코딩 > 파이썬' 카테고리의 다른 글

[파이썬 오류]TypeError : 'method' object is not subscriptable  (0) 2023.04.06
[Selenium] 네이버 로그인  (0) 2023.02.09
파이썬 데이터프레임(Dataframe)  (0) 2023.02.09
딕셔너리(Dictionary)  (0) 2023.02.09
리스트(List)  (0) 2023.02.09