강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của em2day2047
em2day2047

câu hỏi đã được viết

Khóa học cơ bản về Selenium

Mã hóa logic chương trình theo dõi xếp hạng sản phẩm của cửa hàng thông minh

7강 질문이 있습니다.

Viết

·

501

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()
pythonselenium

Câu trả lời 1

1

lread90님의 프로필 이미지
lread90
Người chia sẻ kiến thức

확인해보니 data-nclick의 내용보시면 그 안에 80118943823 상품 고유번호가 들어갑니다

image

이러면 코드가 변경이 되어야하는데 위쪽 보시면 ,r: 뒤에 등수 값이 있어야하는데 없는 것으로 보아 ,r: 값을 사용하실 수는 없고

# 기존 코드
진짜등수 = 데이터.split(f"{타겟상품코드},r:")[-1].split(',')[0]

# 변경 코드 but, 등수정보가 포함이 안 되어있는경우
진짜등수 = 데이터.split(f",r:")[-1].split(',')[0]

find_elements를 통해서 몇번째 인덱스에 있는지 찾는 코드 형태로 변경이 되어야합니다

 

em2day2047님의 프로필 이미지
em2day2047
Người đặt câu hỏi

선생님

제가 이해가 잘 안되는데요.

먼저

개발자도구 elements 내용은 다름과 같습니다.


image

그런데,

타겟상품코드 = "4627652"

타겟상품_셀렉터 = f'a[data-ms="{타겟상품코드}"]'

위의 코드에서는 작동이 안되고

 

타겟상품코드 = "83449501731"

타겟상품_셀렉터 = f'a[data-i="{타겟상품코드}"]'

이 코드에서는 작동이 되는 이유를 모르겠습니다.

 

참고로, data-ms 값은 업체고유값으로 보이니다.

 

답변 주시면 정말 감사하겠습니다.

 

 

Hình ảnh hồ sơ của em2day2047
em2day2047

câu hỏi đã được viết

Đặt câu hỏi