Python/Web crowling

window,mac selenium 새 탭 열기 및 탭 전환

noodle-dev 2020. 2. 9. 22:01

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://daeunginfo.blogspot.com/2019/05/python-selenium.html