JavaRush /Курси /Python SELF UA /Обхід захисту від ботів: методи обходу антиботів та CAPTC...

Обхід захисту від ботів: методи обходу антиботів та CAPTCHA

Python SELF UA
Рівень 33 , Лекція 2
Відкрита

1. Антибот-технології: хто з нами грає в кішки-мишки?

Сьогодні ми зануримося в одну з найзахопливіших і, можна сказати, суперечливих тем веб-скрейпінгу — обхід захисту від ботів та боротьбу з CAPTCHA. Як це часто буває у житті програміста, на кожний хитрий болт знайдеться гайка з лівою різьбою, тож давайте подивимось, як ми можемо впоратися з цими перешкодами.

Перш ніж ми почнемо шукати лазівки, давайте розберемося, з чим маємо справу. Антибот-технології — це ніщо інше, як системи, що захищають сайти від надмірної та, часом, небажаної уваги автоматизованих програм. Ось деякі з поширених методів:

  • CAPTCHA: Капча — це як ядерна зброя у світі антиботів. Мета — відсікти бот-запити, представляючи користувачеві задачі, які потребують участі людини: наприклад, обрати всі зображення з таксами або ввести розмазану комбінацію літер.
  • Аналіз поведінки: Деякі сайти оцінюють, як швидко ви заповнюєте форми або взаємодієте з елементами сторінки. Надто швидко? І ось вас вже заблоковано.
  • Затримки та обмеження на запити: Якщо сайт починає підозрювати, що ви не людина, він може збільшити затримки між запитами або зовсім заблокувати вас.

2. Методи обходу антиботів

Тепер, коли ми знаємо ворога в обличчя, давайте розглянемо деякі методи його обходу.

Рішення CAPTCHA

Найочевидніший і водночас складний метод — це автоматизація рішення CAPTCHA. Так, це можливо, але потрібні певні інструменти і служби третіх осіб. CAPTCHA буває різних типів, включаючи текстові, графічні та навіть аудіо капчі.

Для автоматизації рішення CAPTCHA можна використовувати API сервіси, такі як 2Captcha або Anti-Captcha, які пропонують рішення CAPTCHA за невелику плату. Давайте подивимось, як це може бути реалізовано на практиці:


import requests

def solve_captcha(api_key, site_url, captcha_image_url):
    # Завантажуємо зображення капчі
    captcha_image = requests.get(captcha_image_url).content
    
    # Надсилаємо зображення на сервіс та отримуємо ID задачі
    response = requests.post("http://2captcha.com/in.php", files={'file': captcha_image}, data={'key': api_key, 'method': 'post'})
    captcha_id = response.text.split('|')[1]
    
    # Отримуємо відповідь капчі
    solution_url = f"http://2captcha.com/res.php?key={api_key}&action=get&id={captcha_id}"
    solution_response = requests.get(solution_url)
    
    while 'CAPCHA_NOT_READY' in solution_response.text:
        solution_response = requests.get(solution_url)
    
    return solution_response.text.split('|')[1]

# Приклад використання функції
api_key = 'ВАШ_КЛЮЧ_2CAPTCHA'
site_url = 'https://example.com'
captcha_image_url = 'https://example.com/captcha_image'

captcha_solution = solve_captcha(api_key, site_url, captcha_image_url)
print("Рішення капчі:", captcha_solution)
    

Цей код ілюструє, як можна зробити запит на рішення капчі. Проте, такі методи можуть бути неефективними для складних графічних задач або якщо сайт активно змінює свої алгоритми.

Імітація людської поведінки

Ще один спосіб обману — це імітація людської поведінки. Ви можете впроваджувати затримки у випадкових місцях ваших скриптів, змінювати user-agent, емітувати двосторонні взаємодії і навіть використовувати методи руху миші з Selenium:


from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time

driver = webdriver.Chrome()
driver.get('https://example.com')

# Емітуємо рух миші
actions = ActionChains(driver)
element = driver.find_element_by_id('button')
actions.move_to_element(element)
actions.perform()

# Затримка для створення природньої взаємодії
time.sleep(2)

# Виконуємо дію
element.click()
    

Детальніше про Selenium ми розповімо в наступних лекціях.

Використання динамічних IP та проксі

Ви також можете використовувати проксі-сервери, щоб змінювати IP-адресу, з якої надсилаються запити. Це може допомогти обійти обмеження за кількістю запитів від одного IP. Для цього існують сервіси типу Bright Data і Smartproxy.


import requests

proxy = {
  "http": "http://123.456.789.012:8080",
  "https": "http://123.456.789.012:8080",
}

response = requests.get('https://example.com', proxies=proxy)
print(response.content)
    

3. Важливі зауваження

Реалізація обходу антиботів вимагає знань та експериментів. Важливо пам'ятати, що не всі методи законні чи вітаються сайтом. Завжди перевіряйте, що дозволено у "robots.txt", і дотримуйтесь Правил Хорошого Тону у веб-скрейпінгу, уникаючи перевантаження серверів. Це не лише дозволить уникнути юридичних проблем, але й буде повагою до чужої роботи.

Ніколи не запускайте серйозний парсер зі свого домашнього IP. За навчальний парсинг вам нічого не буде, але якщо ваш скрипт покладе чийсь сервер, випадково відправивши одночасно кілька тисяч запитів, до вас можуть виникнути питання. А слідом за питаннями до вас прийдуть люди, які захочуть ці питання задати.

Коментарі (1)
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ
vova_yu Рівень 64
22 травня 2025
Вже не вперше для розвязування задачі потрібні знання з наступних рівнів. На даному етапі це - "Імітація поведінки людини"