Information Communication Technology/Python

[Python] webdriver selenium 오류 해결 방법

반응형

selenium (webdriver DeprecationWarning) 오류 해결 방법

webdriver DeprecationWarning 오류
webdriver DeprecationWarning 오류

※저는 vscode 툴을 사용중에 있습니다. 파이참과 같은 다른 툴은 아래의 해결방법이 안먹힐 수 있으니 주의하시고 봐주시길 바랍니다.


오류 발생 원인

크롬 드라이버를 사용한 프로젝트를 진행 중 갑작스런 오류가 발생했습니다. 위의 사진에서 나타난 것 처럼 DeprecationWarning: executable_path has been deprecated, please pass in a Service object 오류가 발생했는데 이는 selenium의 버전이 3대에서 4대로 업데이트되면서 명령어 일부의 사용법이 바뀐 것 같습니다. 아마 저도 모르게 selenium이 업데이트 되면서 명령어 문법도 달라져서 오류가 발생한 것 같습니다.

AttributeError오류
AttributeError 오류

find_element_by_xpath 문법도 달라져 오류가 발생한 것 을 볼 수 있습니다. AttributeError: 'WebDriver' object has no attribute 'find_element_by_xpath'으로 오류가 나타났다는 문구가 보이는데 3대 버젼에서 사용한 방식과는 다르게 문법을 구성해야 되나봅니다.


문법 변경

driver = webdriver.Chrome(r'chromedriver.exe')

↓ (다음과 같이 변경했습니다.) service 라이브러리를 사용하여 별다른 크롬드라이버의 삽입없이 자동으로 쓸 수 있는 방식으로 바꼈습니다.

driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))

driver.find_element_by_xpath("xpath 주소")

↓ (다음과 같이 변경했습니다.) by_path가 없어지고 매개변수칸에 by=By.XPATH로 설정하는 것으로 바꼈습니다.

 id_input = driver.find_element(by=By.XPATH, value='xpath주소')

위의 문법을 사용하기 위해서는 아래의 라이브러리들을 import해줘야 합니다.

from selenium import webdriver
import time

from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager

해결

위의 내용들을 변경, 추가 후 run을 진행했는데 잘 실행되는 것을 볼 수 있었습니다.

파이선-오류-해결
파이선 오류 해결
no-problem
실행 문제 없음

반응형