반응형

Selenium 사용 시 아래와 같은 경고 메시지가 표시되는 경우가 있다.

 

WARNING:urllib3.connectionpool:Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<urllib3.connection.HTTPConnection object at 0x00000229B1AA7FD0>: Failed to establish a new connection: [WinError 10061] 대상 컴퓨터에서 연결을 거부했으므로 연결하지 못했습니다')': /session/bf8000eff591a4e17810d9d23c3c91cc/window/handles
WARNING:urllib3.connectionpool:Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<urllib3.connection.HTTPConnection object at 0x00000229B1AC3760>: Failed to establish a new connection: [WinError 10061] 대상 컴퓨터에서 연결을 거부했으므로 연결하지 못했습니다')': /session/bf8000eff591a4e17810d9d23c3c91cc/window/handles
WARNING:urllib3.connectionpool:Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<urllib3.connection.HTTPConnection object at 0x00000229B1AC3280>: Failed to establish a new connection: [WinError 10061] 대상 컴퓨터에서 연결을 거부했으므로 연결하지 못했습니다')': /session/bf8000eff591a4e17810d9d23c3c91cc/window/handles

 

이유는 selenium 의 webdriver 선언을 한 후 반복문에 들어간 후 quit() 로 닫았다가 다시 시도를 하는 경우 발생한다.

driver = webdriver.Chrome('./chromedriver', chrome_options=options)

for i in range(1, 100):
	driver.get("https://url.com")  
	driver.quit()

이런 경우 발생한다.

 

해결방법은 다음과 같이 webdriver 선언을 반복문 안으로 넣으면 된다.

for i in range(1, 100):
	driver = webdriver.Chrome('./chromedriver', chrome_options=options)
	driver.get("https://url.com")  
	driver.quit()
반응형
반응형

언젠가 부터 파이썬 Selenium 을 돌리는데 아래 경고 메시지가 표시되기 시작했다.

DeprecationWarning: find_element_by_* commands are deprecated. Please use find_element() instead

이 경고 메시지는 Selenium 이 4.* 으로 업데이트 되면서 그동안 우리가 잘 써오던 driver.find_element_by_id(), find_element_by_css_selector() 등이 deprecated 됐다. 쉽게 말해 문법이 바뀌어서 다른 방법을 적용해야 한다.

 

우선 import 부터 하자

from selenium.webdriver.common.by import By

 

각 변경된 내용은 아래와 같다.

driver.find_element_by_id("element_id")
driver.find_element(By.ID, "element_id")

driver.find_element_by_name("element_name")
driver.find_element(By.NAME, "element_name")

driver.find_element_by_tag_name("element_tag_name")
driver.find_element(By.TAG_NAME, "element_tag_name")

driver.find_element_by_css_selector("element_css_selector")
driver.find_element(By.CSS_SELECTOR, "element_css_selector")

driver.find_element_by_class_name("class_name")
driver.find_element(By.CLASS_NAME, "class_name")

driver.find_element_by_link_text("element_link_text")
driver.find_element(By.LINK_TEXT, "element_link_text")

driver.find_element_by_partial_link_text("element_partial_link_text")
driver.find_element(By.PARTIAL_LINK_TEXT, "element_partial_link_text")

driver.find_element_by_xpath("element_xpath")
driver.find_element(By.XPATH, "element_xpath")

 

그리고 driver.find_elements_* 를 사용하던 경우는 아래와 같이 s 만 더 붙여주면 된다.

driver.find_elements_by_id("element_id")
driver.find_elements(By.ID, "element_id")

driver.find_elements_by_name("element_name")
driver.find_elements(By.NAME, "element_name")

driver.find_elements_by_tag_name("element_tag_name")
driver.find_elements(By.TAG_NAME, "element_tag_name")

driver.find_elements_by_css_selector("element_css_selector")
driver.find_elements(By.CSS_SELECTOR, "element_css_selector")

driver.find_elements_by_class_name("class_name")
driver.find_elements(By.CLASS_NAME, "class_name")

driver.find_elements_by_link_text("element_link_text")
driver.find_elements(By.LINK_TEXT, "element_link_text")

driver.find_elements_by_partial_link_text("element_partial_link_text")
driver.find_elements(By.PARTIAL_LINK_TEXT, "element_partial_link_text")

driver.find_elements_by_xpath("element_xpath")
driver.find_elements(By.XPATH, "element_xpath")

 

기존 find_element_by_* 이 방식도 당분간은 계속 사용해도 되지만, 언젠가는 사용이 중지되어 에러가 나게 될 것이니

검색한 김에 수정해보자.

반응형

+ Recent posts