네이버 블로그글로 이동하여 공감클릭

탭 이동과 프레임 이동

이번에는 친구 게시물로 이동하여
공감을 클릭하는 기능입니다.

여기는 switch_to와 window_handles를 확인할 수 있습니다.
switch_to.window : 브라우저의 탭을 이동합니다.
switch_to.frame : frame으로 이동합니다.

■블로그 글 클릭하기

1
2
3
4
5
6
7
8
#글 클릭하기
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.아직 공감하지 게시물이면 클릭합니다.


현재 크롬드라이버가 인식하는 탭을 확인합니다.

1
2
3
4
    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) 전환

공감하기 부분을 가져오려 하면
엘리먼트를 찾을 수 없다고 에러가 발생합니다.

1
2
3
#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()을 사용 후에 엘리먼트를 찾으시면 됩니다.




■ 공감 클릭

1
driver.find_element(By.CLASS_NAME, 'u_likeit_list_btn.off').click()

프레임 전환이 완료된 이후
공감이 클릭되지 않는 엘리먼트를 찾아 클릭해줍니다.





■ 탭 닫기

1
2
3
4
5
6
7
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로 전체 탭을 가져와서
반복문으로 모든 탭을 닫아줍니다.(첫번째 탭 제외)

아래는 전체 소스 입니다.
네이버 로그인 부분은 이전소스네이버로그인에서 확인 하실 수 있습니다.

 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
34
#....네이버로그인 생략..


#첫번째 탭 메인탭으로 저장
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()

TAG: #switch_to.window # #switch_to.frame #window_handles #selenium