selenium 새 탭 열기
실제 사람이 인터넷에서 새로운 탭을 열기 위해서는 Ctrl + Mouse Click으로 새탭을 엽니다.
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
browser = webdriver.Chrome()
browser.get("http://www.google.com")
# 본인이 클릭하고 싶은 것 클릭
target = browser.find_element_by_css_selector("div.gb_e a")
# window 새로운 탭 열기
target.send_keys(Keys.CONTROL + "\n")
# mac 새로운 탭 열기
# target.send_keys(Keys.COMMAND +"\n")
target에 send_keys를 이용해 a tag에 Ctrl + Click을 보내어 새로운 탭을 열게됩니다.
mac의 경우에는 Ctrl + Click이 아닌 Command + Click을 보내야 합니다.
send_keys는 현재 browser 초점이 맞춰진 요소에 대해 키값을 보냅니다.
send_keys 매개변수로 Keys class에 선언되어 있는 상수들을 넣으시면 됩니다.
target.send_keys(Keys.CONTROL + "\n")를 살펴보면
Keys.CONTROL은 selenium 상에서 Ctrl 키이며 \n은 엔터를 의미합니다.
엔터(\n)는 클릭과 동일하기 때문에 Ctrl + Click을 하라는 의미가 됩니다.
target.send_keys(Keys.COMMAND + "\n")를 살펴보면
위와 동일하게 Command + Click을 하라는 의미입니다.
google -> gmail click(새로운 탭)
selenium 탭 전환
새로운 탭을 열었을 시 selenium은 default로 parent window 창을 초점으로 잡고 있기에 탭 전환이 필요합니다.
selenium 탭을 전환하기 위해서는 switch_to_window()를 사용해야 합니다.
매개변수로 window_name을 넣어야하는데
각 window 별 name은 selenium의 window_handles 함수로 알 수 있습니다.
window_handles
현재 활성화 된 window_name를 list 형식으로 반환합니다.
print(browser.window_handles)
# 출력
# [ 'CDwindow-6FE9F5DBE81F5896CC9B47271CED490E',
# 'CDwindow-3D485A02396414CCD1189B3A01AA72D1' ]
탭을 연 순서에 따라 0, 1의 인덱스를 가지며
ex) 3개의 탭이 열려있다면 순서대로 0, 1, 2의 인덱스를 가집니다.
# 새로운 탭으로 초점을 전환
browser.switch_to_window(browser.window_handles[1])
새로운 탭을 열더라고 selenium은 parent window 창을 초점으로 잡고 있으니 탭을 전환합니다.
browser.window_handles[1]을 사용해서 2번째 탭으로 이동하라고 명시했습니다.
2번째 탭 활성화
browser 종료
# 현재 탭 종료
browser.close()
# 첫번째 탭으로 전환
browser.switch_to_window(browser.window_handles[0])
현재 browser의 초점이 맞춰진 해당 탭만 닫습니다.
사용 중인 탭을 닫더라도 browser의 초점이 자동으로 이동하지 않습니다.
사용할 탭을 다시 지정해주어야 합니다.
# 모든 탭 종료
browser.quit()
browser의 모든 탭을 닫습니다.
close()와 quit()의 차이점이 궁금하신 분은 아래의 링크를 참조하세요.
selenium close와 quit의 차이점
https://daeunginfo.blogspot.com/2019/06/python-selenium-close-quit.html
전체코드
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
browser = webdriver.Chrome()
browser.get("http://www.google.com")
# 본인이 클릭하고 싶은 것 클릭
target = browser.find_element_by_css_selector("div.gb_e a")
# window 새로운 탭 열기
target.send_keys(Keys.CONTROL + "\n")
# mac 새로운 탭 열기
# target.send_keys(Keys.COMMAND +"\n")
# window_name 출력
print(browser.window_handles)
# 새로운 탭으로 초점을 전환
browser.switch_to_window(browser.window_handles[1])
# 현재 탭 종료browser.close()
# 첫번째 탭으로 전환
browser.switch_to_window(browser.window_handles[0])
# 모든 탭 종료
# browser.quit()
참고문헌
- https://m.blog.naver.com/PostView.nhn?blogId=kiddwannabe&logNo=221449593300&proxyReferer=https%3A%2F%2Fwww.google.com%2F
- https://selenium-python.readthedocs.io/api.html#selenium.webdriver.remote.webdriver.WebDriver.window_handles
- https://www.techbeamers.com/switch-between-windows-selenium-python/
https://daeunginfo.blogspot.com/2019/05/python-selenium.html
'Python > Web crowling' 카테고리의 다른 글
Selenium에서의 병렬 실행 및 세션 처리 (0) | 2020.02.09 |
---|---|
[ selenium의 webdriver() / implicitly_wait() / WebDriverWait() + EC + By ==> bs4 ]를 이용한 연결된 페이지를 타고가서/기다렸다가 추가정보를 scrapping하는 crawling (0) | 2020.02.09 |
열려있는 chrome에서 크롤링 (4) | 2020.02.09 |
selenium에서 자식 창, 부모 창 이동하기 (0) | 2020.02.09 |
selenium으로 크롤링 시 현재 실행중인 크롬에서 실행하기 (0) | 2020.02.09 |