2024. 1. 24. 10:04ㆍIT관련
Selenium으로 자동화를 실행하다 보면 기존 chrome에서 사용하던 프로필을 사용해야 할때가 있다.
이때 chrome 주소창에 chrome://version을 입력하면 프로필이 어디에 있는지 확인할 수 있다.
프로필에 자세한 내용은 아래 링크를 참고하면 된다.
Command line에서 chrome 실행시 user-data-dir 옵션을 이용하여 프로필 경로를 지정할 수도 있다.
chrome.exe --user-data-dir=c:\foo
이 user-data-dir 옵션을 이용하면 자동화시 나의 프로필을 적용할 수도 있고, 자동화시 사용할 프로필을 신규로 만들어 사용할 수도 있다.
그리고 selenium 실행시 매번 chrome이 새창으로 표시되는데, 이걸 하나의 window로 관리할 수도 있다. 이를 위해서는 remote debugging 옵션을 사용하면 된다.
chrome.exe --remote-debugging-port=9222 --user-data-dir=remote-profile
Chrome 실행시 remote denugging port를 지정해 두면 이후 해당 포트로 연결하여 실행중인 chrome을 제어할 수 있다. Chrome DevTools에서 이걸 사용한다고 한다.
예제 코드
from selenium import webdriver
from selenium.webdriver.common.by import By
PORT = 9222
if __name__ == '__main__':
# 크롬 드라이버 생성
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument(r'user-data-dir=C:\remote-profile') # Profile 경로 지정
chrome_options.add_argument(f'remote-debugging-port={PORT}') # 디버깅 포트 설정
chrome_options.add_experimental_option('detach', True)
driver = webdriver.Chrome(options=chrome_options)
# 불필요한 크롬창 제거
if len(driver.window_handles) > 1:
for handle in driver.window_handles[:-1]:
driver.switch_to.window(handle)
driver.close()
driver.switch_to.window(driver.window_handles[0])
driver.get('https://www.naver.com') # URL로 이동
input = driver.find_element(By.XPATH, '//*[@id="query"]')
input.send_keys('selenium')
search = driver.find_element(By.XPATH, '//*[@id="sform"]/fieldset/button')
search.click()
print('end')
Chrome에서 지원하는 옵션들은 add_argument를 이용하여 적용할 수 있다.
위 코드를 보면 c:\remote-profile로 프로필 경로를 지정했다. 만약 해당 폴더가 없다면 신규로 생성된다.
chrome_options.add_argument(r'user-data-dir=C:\remote-profile') # Profile 경로 지정
그리고 remote-debugging-port를 9222로 지정하여 chrome을 실행하기 때문에 다시 이 코드가 또 실행되어도 9222 포트로 실행중인 chrome을 찾아 연결후 그 chrome을 네이버로 이동시킬 것이다. 만약 해당 포트로 실행중인 chrome이 없다면 그냥 새창이 뜬다.
PORT = 9222
chrome_options.add_argument(f'remote-debugging-port={PORT}') # 디버깅 포트 설정
Remote로 네이버로 이동하고 나면 불필요하게 빈 chrome이 덩그러니 남아 있는데, 이건 아래 코드로 닫아버릴 수 있다.
# 불필요한 크롬창 제거
if len(driver.window_handles) > 1:
for handle in driver.window_handles[:-1]:
driver.switch_to.window(handle)
driver.close()
driver.switch_to.window(driver.window_handles[0])
'IT관련' 카테고리의 다른 글
Selenium chrome 실행시 "Chrome이 자동화된 테스트 소프트웨어에 의해 제어되고 있습니다." 자동화 메시지 제거 (0) | 2024.01.26 |
---|---|
Requests --> Selenium 세션 쿠키 유지 (0) | 2024.01.26 |
셀레늄(Selenium)으로 웹제어 (0) | 2024.01.23 |
Raspberry Pi 4B(64 bits OS)에서 원격데스크톱(xrdp) 연결 오류 (0) | 2023.09.12 |
Ubuntu에 안드로이드 command line 빌드 환경 (4) | 2023.06.21 |