네이버 블로그글로 이동하여 공감클릭
탭 이동과 프레임 이동
이번에는 친구 게시물로 이동하여
공감을 클릭하는 기능입니다.
여기는 switch_to와 window_handles를 확인할 수 있습니다.
switch_to.window : 브라우저의 탭을 이동합니다.
switch_to.frame : frame으로 이동합니다.
■블로그 글 클릭하기
#글 클릭하기
post_element = driver.find_elements(By.CSS_SELECTOR,'div.list_post_article>div.item')
if post_element:
for post in post_element:
isLike = '공감해요' in post_element[index].text
if isLike and post_element[index].find_element(By.CLASS_NAME, 'u_likeit_list_btn._button.off'):
post_element[index].find_element(By.CLASS_NAME,'title_post').click()
break
1.post_element : 친구들의 게시글 엘리먼트를 가져옵니다.(10개)
2.공감기능이 있는지 확인하고, 공감에 클릭이 되어 있는지 확인합니다.
3.아직 공감하지 게시물이면 클릭합니다.
현재 크롬드라이버가 인식하는 탭을 확인합니다.
main_window = driver.window_handles[0]
print(driver.current_url)
driver.switch_to.window(driver.window_handles[1])
print(driver.current_url)
친구 게시글을 클릭하였기 때문에 탭이 2개 인 상태입니다.
- window_handles는 현재 활성화 되어 있는 탭을 리스트 형태로 확인할 수 있습니다.
main_window 변수에 첫번째탭(0)을 저장합니다.
switch_to.window 로 두번째 탭으로 이동 후 current_url로 확인합니다.
■ 프레임(Frame) 전환
공감하기 부분을 가져오려 하면
엘리먼트를 찾을 수 없다고 에러가 발생합니다.
#frame전환
driver.switch_to.frame('mainFrame')
driver.find_element(By.CLASS_NAME, 'u_likeit_list_btn.off').click()
보통은 탭을 전환 후 find_element로 찾으면 되지만,
body 밑에 iframe안에 글이 있는 상태입니다.
이런 경우 switch_to.frame()을 사용 후에 엘리먼트를 찾으시면 됩니다.
■ 공감 클릭
driver.find_element(By.CLASS_NAME, 'u_likeit_list_btn.off').click()
프레임 전환이 완료된 이후
공감이 클릭되지 않는 엘리먼트를 찾아 클릭해줍니다.
■ 탭 닫기
driver.switch_to.window(main_window)
print(driver.current_url)
for h in driver.window_handles:
if h in main_window:
continue
else:
driver.close()
공감 클릭이 완료된 이후
첫번째 탭으로 이동합니다.
window_handles로 전체 탭을 가져와서
반복문으로 모든 탭을 닫아줍니다.(첫번째 탭 제외)
아래는 전체 소스 입니다.
네이버 로그인 부분은 이전소스네이버로그인에서 확인 하실 수 있습니다.
#....네이버로그인 생략..
#첫번째 탭 메인탭으로 저장
main_window = driver.window_handles[0]
print(driver.current_url)
#글 클릭하기
post_element = driver.find_elements(By.CSS_SELECTOR,'div.list_post_article>div.item')
if post_element:
for post in post_element:
isLike = '공감해요' in post_element[index].text
if isLike and post_element[index].find_element(By.CLASS_NAME, 'u_likeit_list_btn._button.off'):
post_element[index].find_element(By.CLASS_NAME,'title_post').click()
break
#두번째 탭이 열렸지만 driver가 인식하는 첫번째탭
print(driver.current_url)
#탭 이동
driver.switch_to.window(driver.window_handles[1])
#현재 url확인
#frame전환
driver.switch_to.frame('mainFrame')
driver.find_element(By.CLASS_NAME, 'u_likeit_list_btn.off').click()
driver.switch_to.window(main_window)
print(driver.current_url)
for h in driver.window_handles:
if h in main_window:
continue
else:
driver.close()