Как парсить Ozon через Selenium и обойти их систему защиты?

Добрый день! Есть задачка: спарсить ссылки на всех продавцов на Ozon. (https://www.ozon.ru/seller/)

Продавцы в этом разделе подгружаются при скролинге. Понятное как осуществить сбор ссылок, но не понятно как обойти их защиту, потому что при подключении селениума скролинг не осуществляется (первые 12 продавцов выдается и всё).

Скрытие режима вебдрайвер, ротация user агентов не помогает. При подключении seleniumwire для того чтобы использовать прокси с авторизацией вообще срабатывает защита от Cloudflare и выдает сразу капчу.

Что можно придумать, чтобы прокрутка страницы на Ozon используя селениум работала?

Прикладываю код, он у вас может не работать, потому что Ozon меняет классы, если поставить свежие классы то ссылки будут добываться, не в этом суть. Надо решить задачу с прокруткой, просто не подгружаются продавцы при прокрутке.

import selenium
from selenium import webdriver
from selenium.webdriver.common.by import By
import time


def get_data():
    # options
    options = webdriver.ChromeOptions()

    # user-agent
    options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36")

    # disable webdriver mode

    # # for older ChromeDriver under version 79.0.3945.16
    # options.add_experimental_option("excludeSwitches", ["enable-automation"])
    # options.add_experimental_option("useAutomationExtension", False)

    # for ChromeDriver version 79.0.3945.16 or over
    options.add_argument("--disable-blink-features=AutomationControlled")

    driver = webdriver.Chrome(options=options)

    driver.get('https://www.ozon.ru/seller/')
    time.sleep(2)
    block = driver.find_element(By.CLASS_NAME, 'j2u')
    card = block.find_elements(By.CLASS_NAME, 'j1q.p5j')
    for lin in card:
        link = lin.find_element(By.CLASS_NAME, 'jp6').find_element(By.CLASS_NAME, 'pj6').get_attribute('href')
        print(link)
        time.sleep(1)

    #driver.execute_script("window.scrollTo(0, 100)")


if __name__ == '__main__':
    get_data()
  • Вопрос задан
  • 5733 просмотра
Пригласить эксперта
Ответы на вопрос 2
@TendingStream73
Попробуй эту библиотеку
https://pypi.org/project/st-undetected-chromedriver/
Ответ написан
Комментировать
goctio
@goctio
Вопрос уже по всей видимо не актуален, но ответ все-таки оставлю. Если задача состоит именно в прокрутке страницы, чтобы подгружались следующие элементы - то необходимо перемещаться по карточкам блоков, а в этом нам поможет ActionChains

Пример кода:

from selenium.webdriver.common.action_chains import ActionChains

next_page = driver.find_element(by=By.LINK_TEXT, value='Дальше')
action = ActionChains(driver)
action.move_to_element(next_page).perform()
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы