【问题标题】:Scrapy with dynamic captcha带有动态验证码的 Scrapy
【发布时间】:2019-05-15 01:45:01
【问题描述】:

我试图从网站的表单中破解captcha,但这个验证码是动态的,它没有 URL,而是有类似的东西

src="captcha?accion=image"

这里最好的选择是什么?我读过类似使用中间件或类似的东西。我也知道可以使用 Selenium 或 Splash 或其他浏览器驱动程序(屏幕截图)来完成,但我想只使用 Scrapy,当然如果可能的话。

【问题讨论】:

    标签: python selenium web-scraping scrapy captcha


    【解决方案1】:

    这是使用anticaptchaPIL绕过指定captcha 的完整解决方案。

    由于这个captcha 的动态性,我们需要获取包含captchaimg 元素的打印屏幕。为此,我们使用 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


    注意事项:

    • 自行负责使用它(聪明点)
    • 您可以通过正确处理异常来改进代码;
    • anticaptchapaid service (0.5$/1000 imgs);
    • 我不隶属于anticaptcha

    【讨论】:

    • 谢谢,这对我帮助很大,但还有一个问题,我正在使用scrapy,当scrapy和selenium“共享”驱动程序时不会有任何问题吗?以某种方式?
    • 不客气。我通常使用selenium,老实说对scrapy 了解不多。我猜你必须尝试一下。GL!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-01
    • 2014-02-24
    • 2015-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-01
    相关资源
    最近更新 更多