Моя цель — получить результаты поисковых систем (URL-адреса) с yandex.ru
Я запускаю этот селеновый скрипт. На моем ПК скрипт работает нормально, но на сервере я вижу сложный капчу (см. изображение ниже)
Как улучшить скрипт, чтобы капча не появлялась
Моя цель — получить результаты поисковых систем (URL-адреса) с yandex.ru Я запускаю этот селеновый скрипт. На моем ПК скрипт работает нормально, но на сервере я вижу сложный капчу (см. изображение ниже) Как улучшить скрипт, чтобы капча не появлялась [code]import undetected_chromedriver as uc import random from selenium.webdriver.common.by import By from datetime import datetime import time import logging import traceback import pathlib
def parse(self, film_name: str): logger.info(f"Start parse {film_name}") result_urls = [] try: self.driver.get(f"https://ya.ru/search/?text={film_name}&lr=213&search_source=yaru_desktop_common&search_domain=yaru") self.check_captcha() for i in range(1, 5): result_urls.extend(self.parse_page(page_id=i)) self.get_next_page() self.check_captcha() # Human-like random delay time.sleep(random.uniform(2, 5)) except Exception: logger.error(f"Exception in {traceback.format_exc()}") finally: logger.info(f"Found {len(result_urls)} for film {film_name}: {result_urls}")
def parse_page(self, page_id): res = [] urls_raw = self.driver.find_elements(By.XPATH, value='//a[@class="Link Link_theme_normal OrganicTitle-Link organic__url link"]') for url_raw in urls_raw: href = url_raw.get_attribute("href") if href and "yabs.yandex.ru" not in href: res.append(href) logger.info(f"Found {len(res)} urls on page {page_id}") return res
def get_next_page(self): next_link_raw = self.driver.find_elements(By.XPATH, '//div[@class="Pager-ListItem Pager-ListItem_type_next"]') if next_link_raw: next_link_raw[0].click() # Human-like random delay time.sleep(random.uniform(3, 6))
if __name__ == "__main__": pathlib.Path('screens/').mkdir(exist_ok=True) parser = YandexParser(USE_GUI=False) # Default to GUI mode for stealth films = ["Терминатор смотреть", "Саша Таня смотреть", "Джон Уик смотреть онлайн"] idx = 0 while True: try: film = films[idx] idx = (idx + 1) % len(films) parser.parse(film) time.sleep(random.uniform(8, 15)) except Exception as e: parser = YandexParser(USE_GUI=False)
[/code] Журнал работы на сервере [code]2025-05-17 14:53:26,295 [INFO] patching driver executable /home/MY_USER/.local/share/undetected_chromedriver/undetected_chromedriver 2025-05-17 14:53:30,904 [INFO] Start parse Терминатор смотреть 2025-05-17 14:53:33,448 [INFO] Captcha found 2025-05-17 14:53:35,291 [INFO] Button clicked 2025-05-17 14:53:42,194 [INFO] Found 0 urls on page 1 2025-05-17 14:53:42,284 [INFO] Captcha found 2025-05-17 14:53:43,363 [INFO] Button clicked 2025-05-17 14:53:53,826 [INFO] Found 0 urls on page 2 2025-05-17 14:53:53,848 [INFO] Captcha found 2025-05-17 14:53:54,659 [INFO] Button clicked 2025-05-17 14:54:06,023 [INFO] Found 0 urls on page 3 [/code] [img]https://i.sstatic.net/pBGLuyEf.png[/img]