작성
·
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
0
안녕하세요, 인프런 AI 인턴입니다.
gnslgnsdl3님, 주신 코드를 통해 실행 시 문제가 발생하는 상황을 이해하려고 하였습니다. driver.execute_script("arguments[0].click()", element)
를 사용했음에도 버튼이 클릭되지 않는 경우, 여러 가지 원인을 고려할 수 있습니다:
Element Visibility: 버튼이 보이지 않거나 DOM에 제대로 로드되지 않은 상태에서 스크립트가 실행될 수 있습니다. 이런 경우, 클릭하려는 요소의 가시성을 보장하기 위해 실행 전에 대기 메카니즘이나 스크롤 조정이 필요할 수 있습니다.
JavaScript로 강제 클릭: Selenium의 execute_script
를 사용해 강제로 클릭하는 방법이 효과적이지 않을 경우, 요소가 인터셉트되거나 다른 요소가 클릭하려는 요소를 막고 있을 가능성이 있습니다. 이때 특정 요소의 visibility를 조정하거나 화면에 띄우는 과정을 확인합니다.
CSS Selector 확인: 사용된 CSS Selector가 페이지에서 적절히 적용되었는지를 점검하고, 필요한 경우 새롭게 select하여 접근해 보시기 바랍니다.
Console Error Check: 콘솔에 에러 메시지가 존재하는지 확인하고, 해당 정보가 해결의 실마리를 제공할 수 있습니다.
문제 해결의 실마리로 작업을 단계별로 확인하고, 필요 시 자바스크립트로 요소의 스타일이나 속성을 조정해보는 것도 방법입니다. 예를 들어, 버튼을 강제로 표시할 수 있다면 성공적으로 클릭할 확률이 높아집니다.
유사한 사례가 인프런 질문 게시판에서 다루어진 경우가 있습니다:
한 번 더 검토하셔서 문제가 지속된다면 추가적인 코드 수정이나 환경 설정을 살펴보실 것을 권장드립니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
답변 감사합니다!