You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用VBA+ADODB Stream下载验证码遇异常问题求助

问题分析与解决方案

1. 验证码下载内容不一致的原因及解决

验证码生成依赖会话Cookie,你用MSXML2.XMLHTTP单独请求图片URL时,没有携带Selenium浏览器中的会话Cookie,服务器会生成新的验证码,自然和页面显示的不一致。

直接改用Selenium的元素截图功能即可解决,无需额外HTTP请求:

Set oCaptcha = .FindElementByXPath("//*[@id='frmCaseNo']/div[2]/img")
.Wait 1000 ' 延长等待时间确保元素加载完成
oCaptcha.Screenshot.SaveAs ThisWorkbook.Path & "\Number.png"

2. 其他电脑捕获元素返回空图片的排查方向

  • 元素定位不稳定:原XPath可能因页面渲染差异失效,换用更稳定的CSS选择器:
    Set oCaptcha = .FindElementByCss("#frmCaseNo div:nth-child(2) img")
    
  • 页面加载不充分:.Wait 500的固定等待时间不适应不同电脑的加载速度,改用显式等待直到元素可见:
    Dim wait As New WebDriverWait
    Set wait = New WebDriverWait(waitTime:=10) ' 最长等待10秒
    Set oCaptcha = wait.Until(ExpectedConditions.ElementIsVisible(By.XPath("//*[@id='frmCaseNo']/div[2]/img")))
    
  • 驱动与浏览器版本不匹配:其他电脑的浏览器版本和驱动版本不一致,导致元素识别失败,需确保各电脑上的浏览器驱动(如ChromeDriver)与对应浏览器版本完全匹配。
  • 会话未正确建立:部分电脑可能因网络或缓存问题未加载会话,打开页面后先刷新一次:
    .Get "https://eservices.moj.gov.kw/searchPages/searchCases.jsp"
    .Refresh
    

完整优化代码示例

Sub CaptureCaptcha()
    Dim driver As New ChromeDriver
    Dim oCaptcha As WebElement
    Dim wait As New WebDriverWait
    
    driver.Start "chrome"
    driver.Get "https://eservices.moj.gov.kw/searchPages/searchCases.jsp"
    
    ' 显式等待验证码元素加载完成
    Set wait = New WebDriverWait(waitTime:=10)
    Set oCaptcha = wait.Until(ExpectedConditions.ElementIsVisible(By.XPath("//*[@id='frmCaseNo']/div[2]/img")))
    
    ' 截取验证码并保存到本地
    oCaptcha.Screenshot.SaveAs ThisWorkbook.Path & "\Number.png"
    
    driver.Quit
End Sub

内容的提问来源于stack exchange,提问作者YasserKhalil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 23:23:13