Development/Python

[selenium] 요소 선택이 안될 경우

곽진돔 2022. 12. 27. 16:24

셀레니움 사용하기

라이브러리 선언

상단에 필요한 라이브러리를 선언한다.

from selenium import webdriver 
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys

option 입력하기

필요한 option이 있다면 입력한다.

header값을 입력해줄 수 있다.

# chrome option
options = webdriver.ChromeOptions()

options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-gpu')
options.add_argument('--disable-dev-shm-usage')
options.add_experimental_option('excludeSwitches', ["enable-logging"])
options.add_argument('user-agent=' + 'Mozilla/5.0 (X11; Ubuntu; Linux i686 on x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2820.59 Safari/537.36')

headless 옵션은 크롬 브라우저 창을 숨겨주는 기능이다.

test할 때는 주석처리해서 실행되는 화면을 보고, 개발이 끝나면 headless옵션을 활성화하였다.

driver 객체 생성하기

driver말고 다른 이름을 사용해도 된다. 

driver = webdriver.Chrome(options=options)
time.sleep(1)
driver.set_window_size(414, 800) #원하는 사이즈로 브라우저 크기 고정, 생략 가능
driver.get('접속할 URL') #URL 접속
time.sleep(2) #2초 대기

요소 선택하기 (css_selector)

driver.find_element_by_css_selector("#loginForm > div > div:nth-child(1) > div > label > input")

요소 선택이 안될 경우

class명 예시

나는 css_selector나 xpath 등으로 안될 때 class_name을 사용하는데 셀레니움에서 class 명을 입력할 때 공백은 마침표(.)으로 치환해서 입력해줘야한다.

공백으로 넣으면 요소를 찾을 수 없는 Message: no such element: Unable to locate element: 오류가 발생한다.

아래와 같이 class명이 Z26q7c UK95Uc jGGQ5e로 되어있으면 공백을 모두 마침표(.)으로 바꿔주면 된다.

  • 기존: Z26q7c UK95Uc jGGQ5e
  • 치환: Z26q7c.UK95Uc.jGGQ5e
텍스트 에디터 등을 활용해서 스페이스바를 마침표로 모두 변환해도 된다.

바꿔주니 정상적으로 선택된다.