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

使用VBA Excel+Selenium调用DeepL翻译无法获取结果的问题求助

问题描述

我正在编写一个Excel VBA函数,通过Selenium调用Chrome浏览器(DeepL不支持IE)抓取DeepL网页实现句子翻译,代码如下:

Public Function deepL(txt As String, inputLang As String, outputLang As String)
Dim url As String
Dim driver As New WebDriver

url = "https://www.deepl.com/translator#" & inputLang & "/" & outputLang & "/" & txt
driver.Start "Chrome"
driver.Timeouts.ImplicitWait = 5000
driver.Get url

deepL = driver.FindElementById("target-dummydiv").Text
driver.Close

End Function
----
Sub translating()
'test for word "probando" from "es" to "en"
'url: https://www.deepl.com/translator#es/en/probando
'it should return: "testing"
MsgBox (deepL("probando", "es", "en"))
End Sub

测试时发现,页面加载后存放翻译结果的div初始为空,使用Get方法获取到的文本为空,但1秒后页面刷新会显示正确结果:

<div id="target-dummydiv" aria-hidden="true" class="lmt__textarea lmt__textarea_dummydiv" lang="en-US">testing</div>

我尝试添加5秒隐式等待,但结果依旧。我还发现该翻译div的visibility属性为hidden,手动设置可见后能得到正确结果,但不知如何在代码中实现。请问我哪里操作有误?

解决方案

问题根源

  1. 隐式等待不适用:隐式等待仅保证元素被找到,无法等待元素内的动态文本加载完成。DeepL翻译结果是异步渲染的,DOM加载完毕后翻译请求仍在后台处理,此时元素存在但文本为空。
  2. 可见性并非核心问题:aria-hidden="true"或visibility:hidden不会阻止获取元素文本,手动设置可见后能拿到结果只是因为等待时间足够让翻译完成,并非可见性本身的影响。

修正代码

改用显式等待,直接等待目标元素的文本非空,确保翻译结果渲染完成后再取值:

Public Function deepL(txt As String, inputLang As String, outputLang As String)
    Dim url As String
    Dim driver As New WebDriver
    Dim wait As New WebDriverWait
    
    url = "https://www.deepl.com/translator#" & inputLang & "/" & outputLang & "/" & txt
    driver.Start "Chrome"
    ' 设置最长等待10秒,可根据网络情况调整
    Set wait = New WebDriverWait(driver, 10)
    driver.Get url
    
    ' 等待目标元素文本不为空
    wait.Until(Function(d) d.FindElementById("target-dummydiv").Text <> "")
    deepL = driver.FindElementById("target-dummydiv").Text
    
    driver.Quit ' 关闭整个浏览器进程,避免残留
End Function

Sub translating()
    ' test for word "probando" from "es" to "en"
    ' url: https://www.deepl.com/translator#es/en/probando
    ' it should return: "testing"
    MsgBox deepL("probando", "es", "en")
End Sub

额外优化点

  • 用driver.Quit替代driver.Close,彻底关闭Chrome进程,防止内存占用;
  • 若遇反爬,可添加浏览器启动参数优化:
    driver.AddArgument "--headless=new" ' 无头模式,不显示浏览器窗口
    driver.AddArgument "--disable-images" ' 禁用图片加载,提升速度
    driver.Start "Chrome"
    
  • 频繁调用时,可将浏览器实例设为模块级变量,复用连接减少启动开销。

内容的提问来源于stack exchange,提问作者Gustavo Rodriguez Coronas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 22:12:26