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")
요소 선택이 안될 경우
나는 css_selector나 xpath 등으로 안될 때 class_name을 사용하는데 셀레니움에서 class 명을 입력할 때 공백은 마침표(.)으로 치환해서 입력해줘야한다.
공백으로 넣으면 요소를 찾을 수 없는 Message: no such element: Unable to locate element: 오류가 발생한다.
아래와 같이 class명이 Z26q7c UK95Uc jGGQ5e로 되어있으면 공백을 모두 마침표(.)으로 바꿔주면 된다.
- 기존: Z26q7c UK95Uc jGGQ5e
- 치환: Z26q7c.UK95Uc.jGGQ5e
텍스트 에디터 등을 활용해서 스페이스바를 마침표로 모두 변환해도 된다.
바꿔주니 정상적으로 선택된다.