JCR 홈페이지에서 로그인을 한 뒤에 검색을 하면 새로운 탭이 켜지고 새로운 탭에 검색결과가 나타났다. 그래서 셀레니움을 통해 활성 탭을 변경하고 검색 내용을 수집할 수 있는 방법을 검색하여 찾아 보았다. 이전 포스팅에 이어서 수행 결과를 정리하였다.

1. 검색 자동화


먼저 위의 이미지와 같은 검색 창에서 검색 할 수 있도록 프로그램을 작성한다.

  1. 검색창에 검색 어 입력
  2. 검색어 입력시 하단에 나오는 버튼 클릭

이전 코드에 이어서(로그인 버튼 누르기 다음) 아래에 추가한 코드는 다음과 같다.

# 키워드 검색
input = 'Peer-to-Peer Networking and Applications'

# 검색창에 키워드 입력후 검색
search = driver.find_element_by_name('search-inputEl')
search.send_keys(input)

# 검색창 하단에 표시되는 버튼 클릭
driver.find_element_by_xpath('//*[@id="boundlist-1029-listEl"]/ul/li').click()
time.sleep(5) # 로딩 기다리기



2. 활성 탭 전환하기

위의 코드를 이용하여 검색창에 검색어를 입력하여 검색은 가능하다. 검색 결과가 새창에 나타나므로 새로 활성화 된 창으로 화면을 변경하여야 한다. 아래의 코드를 추가함 으로써 탭 전환이 가능하다.

먼저 아래의 명령어는 탭 목록들을 보여준다. 새로운 탭을 열고 로딩을 기다린뒤 윈도우 목록을 확인해보면 리스트에 두개의 항목이 들어있는 것을 볼 수 있다.

print(driver.window_handles)
  • 결과 : [‘CDwindow-5869F32E71D5DF1303F64200A76D021F’, ‘CDwindow-19FEAEAE68751A47C2CD0D9008B6BF4E’]

새롭게 열린 탭으로 변경하는 코드는 아래의 코드를 추가하면 된다.

# 최근 열린 탭으로 전환
driver.switch_to.window(driver.window_handles[-1])

# 로딩 기다리기
time.sleep(5)



만약에 새로 옮긴 탭을 닫고 다시 원래 창으로 돌아가고 싶다면 아래의 코드를 입력하면 된다.

# 현재 탭 닫기
driver.close()

# 맨 처음 탭으로 변경(0번 탭)
driver.switch_to.window(driver.window_handles[0])

# 로딩 기다리기
time.sleep(5)



수정한 전체 코드는 아래와 같다.

from selenium import webdriver

options = webdriver.ChromeOptions()

# headless 옵션 설정
options.add_argument('headless')
options.add_argument("no-sandbox")

# 브라우저 윈도우 사이즈
options.add_argument('window-size=1920x1080')

# 사람처럼 보이게 하는 옵션들
options.add_argument("disable-gpu")   # 가속 사용 x
options.add_argument("lang=ko_KR")    # 가짜 플러그인 탑재
options.add_argument('user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36')  # user-agent 이름 설정

# 드라이버 위치 경로 입력
driver = webdriver.Chrome('./chromedriver.exe', chrome_options=options)

# url을 이용하여 브라우저로 접속
driver.get('https://error.incites.thomsonreuters.com/error/Error?DestApp=IC2JCR&Error=IPError&Params=DestApp%3DIC2JCR&RouterURL=https%3A%2F%2Flogin.incites.thomsonreuters.com%2F&Domain=.thomsonreuters.com&Src=IP&Alias=IC2')

driver.implicitly_wait(3)

# 아이디/비밀번호를 입력해준다.
driver.find_element_by_name('username').send_keys('아이디 입력')
driver.find_element_by_name('password').send_keys('비밀번호 입력')

# stay signed in 체크박스 채우기(클릭)
driver.find_element_by_name('rememberme').click()

# 로그인 버튼을 누르기
driver.find_element_by_xpath('/html/body/div/div[1]/div[3]/div[1]/div/div/div/form/button').click()
# 키워드 검색
input = 'Peer-to-Peer Networking and Applications'

# 검색창에 키워드 입력후 검색 버튼 클릭
search = driver.find_element_by_name('search-inputEl')
search.send_keys(input)

driver.find_element_by_xpath('//*[@id="boundlist-1029-listEl"]/ul/li').click()
time.sleep(5)

print(driver.window_handles)

# 새로 열린 탭으로 활성 탭 변경
driver.switch_to.window(driver.window_handles[-1])
time.sleep(5)

# 로그인 된 화면 캡처
driver.get_screenshot_as_file('capture.png')

driver.quit()




reference
  • https://kiddwannabe.blog.me/221288079822