actualización : cambié manualmente cnv.width = this.width a 120 y funciona. También descubrí que la imagen tiene un rendered size y intrinsic size . El ancho es 35 para el rendered size y 40 para el intrinsic size , así que supongo que esta podría ser la razón.
Estoy tratando de usar selenio para obtener una imagen captcha de una página web. Esto es lo que he probado basado en ejemplos de este sitio
def get_ver_code(driver): img = driver.find_element(By.XPATH, '//*[@id="imgCode"]') img = driver.execute_async_script(""" var ele = arguments[0], callback = arguments[1]; ele.addEventListener('load', function fn(){ ele.removeEventListener('load', fn, false); var cnv = document.createElement('canvas'); cnv.width = this.width; cnv.height = this.height; cnv.getContext('2d').drawImage(this, 0, 0); callback(cnv.toDataURL('image/jpeg').substring(22)); }, false); ele.dispatchEvent(new Event('load')); """, img) with open(r"captcha.jpg", 'wb') as f: f.write(base64.b64decode(img)) base64_decoded = base64.b64decode(img) img = Image.open(io.BytesIO(base64_decoded)) img = np.array(img) return img Esto está casi bien, excepto que las imágenes descargadas siempre están ligeramente recortadas en el lado derecho. Muchas veces no afecta a los dígitos, pero a veces sí. Por ejemplo: 
¿Cómo puedo arreglar esto?
Parece que tiene algo que ver con el ancho y la altura del elemento. estás poniendo el img en. ¿Hay tal vez algún margen aplicado por algún otro css?