인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

gnslgnsdl3님의 프로필 이미지
gnslgnsdl3

작성한 질문수

[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)

(고급 기술) 셀레니움 클릭이 안될때 강제로 클릭하게 만들기 (+ StaleElementException 해결방법)

driver.execute_script("arguments[0].click()", element)이 작동하지 않습니다..

작성

·

39

1

from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time
import pandas as pd
from selenium.webdriver.support.select import Select

#드라이버 생성
driver = webdriver.Chrome()

#페이지 이동
driver.get("https://cafe.naver.com/startcodingofficial")

#유투브 후기 버튼 클릭
driver.find_element(By.CSS_SELECTOR, '#menuLink15').click()

#프레임 전환
iframe = driver.find_element(By.CSS_SELECTOR, '#cafe_main')
driver.switch_to.frame(iframe)

#50개씩 표시하기 클릭
element = driver.find_element(By.CSS_SELECTOR, '#listSizeSelectDiv > ul > li:last-child') #50개씩 버튼
# #해결방법 1. 태그를 보이게 만들고 클릭하기.
# driver.find_element(By.CSS_SELECTOR, '#listSizeSelectDiv > a').click() #15개씩 버튼 먼저클릭 해서 버튼 보이게 한 후
# element.click() #50개씩버튼 클릭

#해결방법 2. 자바스크립트 이용해서 태그 강제 클릭
driver.execute_script("arguments[0].click()", element)
time.sleep(1)

저는 이 코드를 실행하면 에러가 나는게 아니라 50개씩 버튼이 안 눌러지고 코드가 끝나는데 왜그런걸까요...

답변 2

0

스타트코딩님의 프로필 이미지
스타트코딩
지식공유자

a 태그를 클릭해야해요!
지금 선택자는 li태그를 가져오게 되어 있습니다 🙂

gnslgnsdl3님의 프로필 이미지
gnslgnsdl3
질문자

답변 감사합니다!

0

안녕하세요, 인프런 AI 인턴입니다.

gnslgnsdl3님, 주신 코드를 통해 실행 시 문제가 발생하는 상황을 이해하려고 하였습니다. driver.execute_script("arguments[0].click()", element)를 사용했음에도 버튼이 클릭되지 않는 경우, 여러 가지 원인을 고려할 수 있습니다:

  1. Element Visibility: 버튼이 보이지 않거나 DOM에 제대로 로드되지 않은 상태에서 스크립트가 실행될 수 있습니다. 이런 경우, 클릭하려는 요소의 가시성을 보장하기 위해 실행 전에 대기 메카니즘이나 스크롤 조정이 필요할 수 있습니다.

  2. JavaScript로 강제 클릭: Selenium의 execute_script를 사용해 강제로 클릭하는 방법이 효과적이지 않을 경우, 요소가 인터셉트되거나 다른 요소가 클릭하려는 요소를 막고 있을 가능성이 있습니다. 이때 특정 요소의 visibility를 조정하거나 화면에 띄우는 과정을 확인합니다.

  3. CSS Selector 확인: 사용된 CSS Selector가 페이지에서 적절히 적용되었는지를 점검하고, 필요한 경우 새롭게 select하여 접근해 보시기 바랍니다.

  4. Console Error Check: 콘솔에 에러 메시지가 존재하는지 확인하고, 해당 정보가 해결의 실마리를 제공할 수 있습니다.

문제 해결의 실마리로 작업을 단계별로 확인하고, 필요 시 자바스크립트로 요소의 스타일이나 속성을 조정해보는 것도 방법입니다. 예를 들어, 버튼을 강제로 표시할 수 있다면 성공적으로 클릭할 확률이 높아집니다.

유사한 사례가 인프런 질문 게시판에서 다루어진 경우가 있습니다:

한 번 더 검토하셔서 문제가 지속된다면 추가적인 코드 수정이나 환경 설정을 살펴보실 것을 권장드립니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

gnslgnsdl3님의 프로필 이미지
gnslgnsdl3

작성한 질문수

질문하기