작성
·
441
1
상품고유번호(data-i)가 아닌 업체고유번호(data-ms)로 했을 때는 왜 작동이 안되는 걸까요?
2페이지에 분명히 있는데, 못찾고 계속 지나갑니다.
알려주시면 감사하겠습니다.
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
import chromedriver_autoinstaller
chromedriver_autoinstaller.install()
드라이버 = webdriver.Chrome()
진짜등수 = -1
등수 = -1
for 페이지인덱스 in range(1, 15):
# 1. 페이지 방문
검색쿼리 = "em"
쇼핑링크 = f"https://msearch.shopping.naver.com/search/all?frm=NVSHPAG&origQuery={검색쿼리}&pagingIndex={페이지인덱스}&pagingSize=40&productSet=total&query={검색쿼리}&sort=rel&viewType=lst"
드라이버.get(쇼핑링크)
time.sleep(2)
# 2. 페이지 4-5번 내리기
for _ in range(4):
드라이버.execute_script("window.scrollBy(0,10000);")
time.sleep(0.5)
# 3. 타겟 상품이 노출되고 있는지 확인
# 4. 없다면 다음페이지로 이동
try:
타겟상품코드 = "4627652"
타겟상품_셀렉터 = f'a[data-ms="{타겟상품코드}"]'
찾은상품_엘리먼트 = 드라이버.find_element(By.CSS_SELECTOR, 타겟상품_셀렉터)
데이터 = 찾은상품_엘리먼트.get_attribute('data-nclick')
진짜등수 = 데이터.split(f"{타겟상품코드},r:")[-1].split(',')[0]
등수 = int(진짜등수) - (int(페이지인덱스) - 1) * 40
break
except:
print(f"{페이지인덱스} 페이지에서 타겟상품을 못찾음")
#next page 방문해야 함
print(f"내상품의 진짜 등수는 : {진짜등수} 입니다.")
print(f"내 상품은 {페이지인덱스} 페이지의 {등수}위에 노출되고 있습니다.")
input()
답변 1
1
확인해보니 data-nclick의 내용보시면 그 안에 80118943823 상품 고유번호가 들어갑니다
이러면 코드가 변경이 되어야하는데 위쪽 보시면 ,r: 뒤에 등수 값이 있어야하는데 없는 것으로 보아 ,r: 값을 사용하실 수는 없고
# 기존 코드
진짜등수 = 데이터.split(f"{타겟상품코드},r:")[-1].split(',')[0]
# 변경 코드 but, 등수정보가 포함이 안 되어있는경우
진짜등수 = 데이터.split(f",r:")[-1].split(',')[0]
find_elements를 통해서 몇번째 인덱스에 있는지 찾는 코드 형태로 변경이 되어야합니다
선생님
제가 이해가 잘 안되는데요.
먼저
개발자도구 elements 내용은 다름과 같습니다.
그런데,
타겟상품코드 = "4627652"
타겟상품_셀렉터 = f'a[data-ms="{타겟상품코드}"]'
위의 코드에서는 작동이 안되고
타겟상품코드 = "83449501731"
타겟상품_셀렉터 = f'a[data-i="{타겟상품코드}"]'
이 코드에서는 작동이 되는 이유를 모르겠습니다.
참고로, data-ms 값은 업체고유값으로 보이니다.
답변 주시면 정말 감사하겠습니다.