Selenium을 주로 크롤링 할 때 사용하다보니 따로 다뤄볼 일이 없었다. 그러다가, PC를 켜면 항상 실행하고 로그인해야 하는 웹이 몇개 있는데 이 과정들을 자동화하기로 하였다. 가장 먼저 해야할 일은 웹을 한번에 여러개 실행할 수 있도록 탭을 여러개 띄우는 것이었다. 구글링을 하여 방법을 찾아봤는데 꽤 많은 방법들이 있었다. 그런데, 링크를 가진 요소를 찾아서 [ Ctrl ] + [ Mouse Click ] 이벤트를 발생시키거나, 버전이 안맞아서 그런지 정상적으로 동작하지 않는게 대부분이었다. 그래서, 좀 더 찾다가 가장 깔끔하다고 생각하는 방법을 소개하려고 한다.
1. 예제 소스
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
import selenium.webdriver.support.ui as ui
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.remote.webelement import WebElement
from selenium.webdriver.common.keys import Keys
from selenium.webdriver import ActionChains
#chromedriver 경로 설정
CHROMEDRIVER_PATH = './chromedriver.exe'
chrome_options = Options()
chrome_options.add_argument('--start-maximized')
#브라우저 실행 및 탭 추가
driver = webdriver.Chrome( executable_path=CHROMEDRIVER_PATH, chrome_options=chrome_options )
driver.execute_script('window.open("about:blank", "_blank");')
driver.execute_script('window.open("about:blank", "_blank");')
tabs = driver.window_handles
# TAB_1
driver.switch_to_window(tabs[0])
driver.get('http://www.naver.com/')
# TAB_2
driver.switch_to_window(tabs[1])
driver.get('http://www.google.com/')
# TAB_3
driver.switch_to_window(tabs[2])
driver.get('https://heodolf.tistory.com/')
|
cs |
- 18~19 ln: driver.execute_script()를 이용하면 javascript를 실행할 수 있음.
*여기서 새 탭을 생성하는 Javascript를 작성. window.open("about:blank", "_blank");
- 21 ln: driver.window_handles에는 현재 열려있는 탭 리스트가 있음.
- 24 ln: driver.switch_to_window() 함수로 탭을 자유롭게 전환할 수 있음.
2. 실행 결과.
3. 마치며
- 새로운 탭을 여러개 사용하는 방법에 대해서 찾아보다가, selenium으로 javascript 까지도 실행할 수 있다는 것을 알게되었다. 이걸 잘만 활용하면 유용하게 쓸 수 있을것 같다.
- 그리고 Seleninum을 실행했을 때, 'Chrome이 자동화된 테스트 소프트웨어에 의해 제어되고 있습니다.' 이 문구가 거슬린다. 다음 포스트에서는 이 문구를 지우는 방법에 대해서 알아보도록 하겠다.
'Back-end > Python' 카테고리의 다른 글
[Celery] 무작정 시작하기 (3) - Chain (0) | 2020.01.20 |
---|---|
[Celery] 무작정 시작하기 (2) - Task (1) | 2020.01.17 |
[pynput] 나만의 단축키 만들기 (6) | 2020.01.15 |
[Celery] 무작정 시작하기 (1) - 설치 및 실행 (1) | 2020.01.10 |
[문법] 데코레이터 - Decorator (2) | 2019.12.24 |
댓글