当前位置: 首页 > 面试题库 >

selenium下载的验证码图片与浏览器中的图片不同

邢英奕
2023-03-14
问题内容

我正在尝试使用Selenium下载一个验证码图像,但是,下载的图像与浏览器中显示的图像不同。如果我尝试在不更改浏览器的情况下再次下载该图像,则会得到另一种图像。

有什么想法吗?

from selenium import webdriver
import urllib


driver = webdriver.Firefox()
driver.get("http://sistemas.cvm.gov.br/?fundosreg")

# Change frame.
driver.switch_to.frame("Main")


# Download image/captcha.
img = driver.find_element_by_xpath(".//*[@id='trRandom3']/td[2]/img")
src = img.get_attribute('src')
urllib.request.urlretrieve(src, "captcha.jpeg")

问题答案:

因为图片的链接会在您打开该链接后src为您提供一个随机的 新验证 码图片!

src可以从屏幕快照中截取屏幕快照,而不是从图像的上下载文件。但是,您需要下载Pillowpip installPillow)并按照此答案中提到的方式使用它:

from PIL import Image
from selenium import webdriver

def get_captcha(driver, element, path):
    # now that we have the preliminary stuff out of the way time to get that image :D
    location = element.location
    size = element.size
    # saves screenshot of entire page
    driver.save_screenshot(path)

    # uses PIL library to open image in memory
    image = Image.open(path)

    left = location['x']
    top = location['y'] + 140
    right = location['x'] + size['width']
    bottom = location['y'] + size['height'] + 140

    image = image.crop((left, top, right, bottom))  # defines crop points
    image.save(path, 'jpeg')  # saves new cropped image


driver = webdriver.Firefox()
driver.get("http://sistemas.cvm.gov.br/?fundosreg")

# change frame
driver.switch_to.frame("Main")

# download image/captcha
img = driver.find_element_by_xpath(".//*[@id='trRandom3']/td[2]/img")
get_captcha(driver, img, "captcha.jpeg")



driver = webdriver.Firefox()
driver.get("http://sistemas.cvm.gov.br/?fundosreg")

# change frame
driver.switch_to.frame("Main")

# download image/captcha
img = driver.find_element_by_xpath(".//*[@id='trRandom3']/td[2]/img")
get_captcha(driver, img, "captcha.jpeg")

(请注意,我对代码进行了一些更改,因此可以在您的情况下使用。)



 类似资料:
  • 从互联网下载图片,并显示。下载图片过程中显示进度条。支持图片缩放,运用了ASI、SDWebImage。支持图片缓存。 [Code4App.com]

  • 使用图片浏览器,你需要在 sm.js 和 sm.css 之后额外引入如下两个文件: <link rel="stylesheet" href="//g.alicdn.com/msui/sm/0.6.2/css/sm-extend.min.css"> <script type='text/javascript' src='//g.alicdn.com/msui/sm/0.6.2/js/sm-exte

  • X1.6.0新增 sp_check_verify_code() 功能: 验证码检查,验证完后销毁验证码增加安全性 参数: 无 返回: 类型boolean true|false; 使用: <?php if(!sp_check_verify_code()){ echo '验证码不正确'; } 注:表单提交时验证码name为verify;支持POST和GET方法

  • cmf_captcha_check($value, $id = "", $reset = true) 功能 验证码检查,验证完后销毁验证码 参数 $value: int 要验证的字符串 $ id: string 验证码的ID $reset:boolean 验证成功后是否重置 返回 boolean 通过验证返回true;失败返回false

  • 查了点资料,总结为: 浏览器会解码不同格式的图片为位图 这是正确的吗? 关于加载浏览器不支持的图片格式 使用: Electron 通信协议: grpc 我可以先把获取到的未支持格式图片(比如jxl)用后端服务解码(比如golang)后在返回给浏览器对吗? 浏览器如何使用解码的图片数据? 图片很大的话,如何实现先显示一张完整的预览图,再慢慢变得清晰? 谢谢

  • 图片浏览器是一个像iOS图片浏览器一样用来展示图片的组件。图片可以被缩放或者平移 (可选)。 图片浏览器使用 幻灯片组件来展现图片。 创建一个图片浏览器实例 图片浏览器只需通过javaScript就可以被创建和初始化。我们需要使用App封装好的方法: myApp.photoBrowser(parameters) - 带参初始化图片浏览器 parameters - object - 图片浏览器参数对