Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Matplotlib
- MySQL
- pandas
- programmers
- 정보처리기사 c언어
- 백준
- 자료구조
- queue
- 알고리즘스터디
- 가상환경
- 알고리즘
- Stack
- javascript
- 프로그래머스
- 알고리즘 스터디
- 코딩테스트
- openCV
- 파이썬
- String Method
- python
- type hint
- Algorithm
- 노마드코딩
- 선그래프
- 데이터시각화
- Join
- dataframe
- Selenium
- aws jupyter notebook
- NumPy
Archives
- Today
- Total
조금씩 꾸준히 완성을 향해
[Python] selenium click 에러 (ElementClickInterceptedException) 본문
Python/Web Scraping
[Python] selenium click 에러 (ElementClickInterceptedException)
all_sound 2022. 9. 14. 22:38한국관광공사 홈페이지에서 여행정보를 가져오는 와중에 예기치 못한 에러를 마주했다.
selenium 사용 중에 click() 함수가 작동을 하지 않는 것이었다.
원래 이렇게 사이트에 봄여행을 검색해서 특정 페이지까지 텍스트 정보를 긁어오는 게 목적이었다.
여기 보이는 이 버튼을 클릭해서 이동하는 코드를 짜고 있는데,
driver.find_element_by_xpath(f'//*[@class="page_box"]/*[@id={i}]').click()
이 코드에서 자꾸 에러가 떴다. ElementClickInterceptedException 이라고 한다.
분명 id 값을 제대로 가져온 게 맞고, 다른 버튼들은 또 잘 작동하니 어리둥절....
구글링 해서 결국 해결책을 알아냈다.
element가 HTML 상에는 존재하지만 선언되지 않았거나 상호작용에 실패할 경우 저런 에러가 뜬다는 것이었다.
driver.find_element_by_xpath(f'//*[@class="page_box"]/*[@id={i}]').click() #error
driver.find_element_by_xpath(f'//*[@class="page_box"]/*[@id={i}]').send_keys(Keys.ENTER) #OK
element를 직접적으로 클릭을 하는 대신에 send_keys() 에 ENTER를 보내주니 잘 작동이 되었다.
아래 코드를 쓰기 위해서는
from selenium.webdriver.common.keys import Keys
요렇게 import를 해주어야 한다.
우여곡절 끝에 무사히 완성한 코드를 공유한다.
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
driver = webdriver.Chrome()
url = "https://korean.visitkorea.or.kr/search/search_list.do?keyword=%EB%B4%84%EC%97%AC%ED%96%89"
driver.get(url)
time.sleep(3)
cnt = 0 #총 게시물 수
page_num = 6 #긁어 올 페이지수
for i in range(1, page_num+1): #페이지를 돌면서 제목, 지역, 해시태그 긁어오기
driver.find_element_by_xpath(f'//*[@class="page_box"]/*[@id={i}]').send_keys(Keys.ENTER) #페이지 이동버튼 클릭
time.sleep(3)
soup = BeautifulSoup(driver.page_source, 'html.parser') #현재 위치한 페이지 정보를 soup 객체에 저장
titles = soup.select('div[class="tit"] > a')
locations = soup.select('div[class="service"]>p')
hashtags = soup.select('p[class="tag_type"]')
print(f'페이지 번호: {i}') #페이지 번호 출력
for t, l, h in zip(titles, locations, hashtags):
print('제목:', t.get_text())
print('지역:', l.get_text())
print('해쉬태그:', h.get_text())
cnt += 1
print(f'{page_num}페이지까지 게시글 수: {cnt}')
결과도 의도한 대로 잘 출력이 된다!! 뿌듯-
'Python > Web Scraping' 카테고리의 다른 글
[selenium] Implicit Waits(암묵적대기) vs Explicit Waits(명시적대기) (0) | 2022.09.14 |
---|---|
[Python] selenium 네이버 로그인 / 자동입력 방지 우회 (0) | 2022.09.14 |
[Python] BeautifulSoup 기본 사용법 정리 (0) | 2022.09.14 |
[Python] 파이썬 크롤링 / requests, User-Agent 기본 셋팅 (0) | 2022.09.13 |