[python] window,mac selenium 새 탭 열기 및 탭 전환


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://daewoonginfo.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()



참고문헌





댓글

댓글 쓰기

이 블로그의 인기 게시물

[opencv-python] 이미지 크기조절(resize) 하는 법

[python]파이썬: csv reader header skip (첫번째 행 무시하기, 안읽기)

[python] selenium close와 quit 차이점