728x90
Time: 2023-03-29 20:26
doc-id : tsl-management-v1.2- 20230329
Problem
Selenium으로 크롤링을 하던 중 메인 페이지에서 추출한 게시글의 url들을 driver.get()으로 방문을 하려는데, 정상적으로 진행이 안되는 문제가 발생했다.
Cause
Selenium 객체에서 href 어트리뷰트 추출하지 않아서 발생한 문제다.
# Selenium version 3.141.0
# pip install selenium==3.141.0
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import pandas as pd
import time
import os
...
# 🦉 Listening Stage ----------------------------------------
# Infinite Scroll until touch down to the bottom
last_height = driver.execute_script("return document.body.scrollHeight")
scrolling = True
# while scrolling:
for x in range(3):
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
print('🦉 Moved to next scroll')
time.sleep(3)
new_height = driver.execute_script("return document.body.scrollHeight")
if new_height == last_height:
scrolling = False
break
else:
last_height = new_height
# url_resources = driver.find_elements_by_xpath("//a[contains(@href, '/companies-to-app')]")
# Get all urls from main page
url_resources = WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located((By.XPATH, "//a[contains(@href, '/companies-to-app')]")))
print(url_resources)
print('🦉 All urls are extracted')
#... [<selenium.webdriver.remote.webelement.WebElement (session="cdc031942cee967dd13c1e0a1b0d31bb", element="591d46e9-4bd0-4e10-8aac-f1cbd194d845")>, <selenium.webdriver.remote.webelement.WebElement (session="cdc031942cee967dd13c1e0a1b0d31bb", element="e3a0c398-eff0-4c50-bd99-627ffad6dea5")>, <selenium.webdriver.remote.webelement.WebElement (session="cdc031942cee967dd13c1e0a1b0d31bb", element="7104b4bf-e44b-4357-89dc-254e1e84261e")>, ...
Solution
...
# url_resources = driver.find_elements_by_xpath("//a[contains(@href, '/companies-to-app')]")
# Get all urls from main page
url_resources = WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located((By.XPATH, "//a[contains(@href, '/companies-to-app')]")))
url_list = [url.get_attribute('href') for url in url_resources]
print(url_list)
print('🦉 All urls are extracted')
...
url_resources는 Selenium의 인스턴스인 것으로 보인다. 여기에서 href 정보를 get_attribute() 메소드로 추출해주는 작업을 해준 뒤 list로 만들어야 정상적으로 link를 뽑을 수 있다.
Insight
Related articles
728x90
'Log > Trouble shoot' 카테고리의 다른 글
shootingstar_실패로그_EC2에 Selenium scraping flask server 띄우기 (0) | 2023.04.14 |
---|---|
Python_불규칙적으로 추가되는 요소 제외 문제, 파이썬 역인덱스로 해결 (0) | 2023.03.29 |
Postgres_인덱스 적용 후 성능이 개선되지 않는 문제 (0) | 2023.03.13 |
Troubleshoot_Ngrinder 테스트 중도 멈춤 문제 (0) | 2023.03.08 |
트러블슛_CICD_Github action 배포 시 파일 누락 문제 (1) | 2023.02.23 |
댓글