Ang*_*lLB 2 python selenium captcha scrapy web-scraping
我试图captcha
在网站中打破一个表单,但这个验证码是动态的,它没有URL,而是它有这样的东西
src="captcha?accion=image"
Run Code Online (Sandbox Code Playgroud)
这里最好的选择是什么?我读过类似使用中间件或类似东西的东西.另外我知道可以使用Selenium或Splash或其他浏览器驱动程序(屏幕截图)来完成,但我想用它来做Scrapy
,如果可能的话.
这是一个完整的解决方案,可以绕过指定的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 )
Run Code Online (Sandbox Code Playgroud)
输出:
ifds
Run Code Online (Sandbox Code Playgroud)
captcha.png
笔记:
anticaptcha
是一项付费服务(0.5美元/ 1000英镑);anticaptcha
. 归档时间: |
|
查看次数: |
766 次 |
最近记录: |