selenium & matplotlib

Theo Kim·2022년 9월 18일
0

pip 앞에 ! 붙이는 이유

!pip install selenium

위처럼 pip install 명령어를 통해 어떤 모듈을 설치할 때 느낌표(!)를 붙이면 ! 이후에 나오는 내용들을 커맨드창에서 입력하는 것과 동일하게 처리해주라는 명령어라고 한다.

matplotlib import 포맷

import matplotlib.pyplot as plt
import platform
import seaborn as sns
from matplotlib import font_manager, rc

# %matplotlib inline
get_ipython().run_line_magic('matplotlib', 'inline')

path = 'C:/Windows/Fonts/malgun.ttf'

if platform.system() == 'Darwin':
    rc('font', family='Arial Unicode MS')
elif platform.system() == 'Windows':
    font_name = font_manager.FontProperties(fname=path).get_name()
    rc('font', family=font_name)
else:
    print('Unknown system. sorry')

DeprecationWarning: executable_path has been deprecated 해결하기

크롬 드라이버 최신 버전의 경로를 입력하고 아래 코드를 수행할 시,

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


위와 같이 DeprecationWarning이 출력된다. 이를 해결하기 위해 구글링해본 결과,
아래처럼 !pip install webdriver-manager를 통해 webdriver-manager 패키지를 설치한 후, Service 객체에 webdriver-manager의 ChromeDriverManager를 이용하여 현재 크롬 버전 드라이버 경로가 아닌 현재 OS내 설치된 크롬 브라우저를 사용하도록 수정하면 Warning 없이 실행되는 것을 확인할 수 있다.

!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('../driver/chromedriver.exe') # Warning 때문에 사용 X
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options)

셀레니움 find_element_by_xpath 오류

driver.find_element_by_xpath('//*[@id="content"]/div[3]/div/h2')

코드를 실행하니 아래와 같은 오류가 뜬다.

원인을 찾아보니 최신 버전의 셀레니움에서는

from selenium.webdriver.common.by import By

driver.find_element(By.XPATH, '//*[@id="content"]/div[3]/div/ul/li[1]/a/span[2]')

위의 코드처럼 selenium.webdriver.common.by 에서 By 모듈을 import해준 뒤,
find_element_by_xpath 대신 find_element(By.XPATH, 'xpath 붙혀넣기')로 작성을 해줘야 오류 없이 작동하는 것을 확인했다.

xpath 뿐만 아니라 class, id 등 다른 경우들도 아래처럼(캡처 출처: https://goodthings4me.tistory.com/567) 작성해야 한다!

profile
THEO's velog

0개의 댓글