Scrapy с динамической капчей - PullRequest
0 голосов
/ 13 декабря 2018

Я пытаюсь разбить captcha внутри формы с веб-сайта, но эта капча является динамической, у нее нет URL, вместо этого есть что-то вроде

src="captcha?accion=image"

Что такоелучший вариант здесь?Я читал что-то вроде использования промежуточного программного обеспечения или что-то подобное.Также я знаю, что это можно сделать с помощью Selenium, Splash или другого драйвера браузера (скриншот), но я хочу сделать это просто с помощью Scrapy, если это возможно, конечно.

1 Ответ

0 голосов
/ 13 декабря 2018

Вот полное решение для обхода указанного captcha с использованием anticaptcha и PIL .

В связи с динамикой этого captcha, нам нужно получить экран печати элемента img, содержащего captcha.Для этого мы используем save_screenshot() и PIL для обрезки и сохранения <img name="imagen"... на диск (captcha.png).
Затем мы отправляем captcha.png в anti-captcha, который вернет решение, то есть:

from PIL import Image
from python_anticaptcha import AnticaptchaClient, ImageToTextTask
from selenium import webdriver

def get_captcha():
    captcha_fn = "captcha.png"
    element = driver.find_element_by_name("imagen") # element name containing the catcha image
    location = element.location
    size = element.size
    driver.save_screenshot("temp.png")

    x = location['x']
    y = location['y']
    w = size['width']
    h = size['height']
    width = x + w
    height = y + h

    im = Image.open('temp.png')
    im = im.crop((int(x), int(y), int(width), int(height)))
    im.save(captcha_fn)

    # request anti-captcha service to decode the captcha

    api_key = 'XXXXXXXXXXXXXXXXXXXXXXXXXX' # api key -> https://anti-captcha.com/
    captcha_fp = open(captcha_fn, 'rb')
    client = AnticaptchaClient(api_key)
    task = ImageToTextTask(captcha_fp)
    job = client.createTask(task)
    job.join()
    return job.get_captcha_text()

start_url = "YOU KNOW THE URL"
driver = webdriver.Chrome()
driver.get(start_url)
captcha = get_captcha()
print( captcha )

Выход:

ifds

captcha.png

enter image description here


Примечания:

  • Используйте его на свой страх и риск (будьте умны) ;
  • Вы можете улучшить код, правильно обрабатывая исключения;
  • anticaptcha - это платная услуга (0,5 $ / 1000 imgs);
  • Я не связанс anticaptcha.
...