首页 > 解决方案 > 如何谷歌从法语翻译成英语?

问题描述

使用谷歌翻译,在使用下面的代码时,法语到英语不会返回正确的值。

如果我手动使用谷歌翻译应用程序,我会得到正确的翻译。

例如;
从“salle de l'émetteur”的代码,返回“导演室”。
从 Google Translate 应用程序中,正确返回“transmitter room”。

如果我检查 Google 翻译应用程序中的元素,我会在以下位置看到正确的翻译

span class="tlid-translation translation" lang = "en" 

我不知道如何从“跨度标题类”中获取这个“内部文本”

有没有办法从

span class="tlid-translation translation" lang = "en"' 

代替

objDivs = objHTML.getElementsByTagName("div"), objDiv.className = "t0"
Public Function Translate(strInput As String, strSourceLng As String, strTargetLng As String) As String

    Dim strURL As String
    Dim objHTTP As Object
    Dim objHTML As Object
    Dim objDivs As Object
    Dim objDiv As Object
    Dim strTranslated As String
    
    ' send query to web page
    strURL = "https://translate.google.com/m?hl=" & strSourceLng & _
        "&sl=" & strSourceLng & _
        "&tl=" & strTargetLng & _
        "&ie=UTF-8&prev=_m&q=" & strInput

    Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP") 'late binding
    objHTTP.Open "GET", strURL, False
    objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
    objHTTP.send ""
    ' create an html document
    Set objHTML = CreateObject("htmlfile")
    With objHTML
        .Open
        .Write objHTTP.responseText
        .Close
    End With
    
    Set objDivs = objHTML.getElementsByTagName("div")
  
    For Each objDiv In objDivs

        If objDiv.className = "t0" Then
            strTranslated = objDiv.innerText
            If strTranslated <> "" Then 
               Translate = strTranslated
             End If
        End If
        
    Next objDiv
    
    Set objHTML = Nothing
    Set objHTTP = Nothing

End Function

标签: htmlexcelvbaweb-scraping

解决方案


如果您使用早期绑定的 html 文档,即 MSHTML.HTMLDocument,那么您可以访问 querySelector 并可以尝试使用 css 选择器来定位该元素

例如

Dim html As MSHTML.HTMLDocument

Set html = New MSHTML.HTMLDocument

html.body.innerHTML = objHTTP.responseText

Debug.Print html.querySelector(".translation[lang=en]").innerText

需要 VBA>Tools>References> 添加对 Microsoft HTML 对象库的引用。

这假设翻译在.innerText. 这将有助于分享显示翻译的回复的相关部分。


推荐阅读