当前,这是我在IE对象中加载网站(从生成的URL仍能正确显示google翻译)之后(成功地)从google translation获得结果的代码(我没有触摸过2天,并在Google更新其Google翻译网站的第二天进行了尝试):
Function GetTransItem(IE As Object) As String
Dim strInnerHTML As String
Dim ArraySplitHTML
Dim iArrayItem As Long
Dim strTranslated As String
strInnerHTML = IE.Document.getElementById("result_box").innerHTML
'some other code here to fix hmtl character encodings, clean up HTML, etc. etc.
GetTransItem = strTranslated
End Function
现在,从上周四(11/29)开始,当Google更新了Google翻译网站时,此行给出了一个错误:
strInnerHTML = IE.Document.getElementById("result_box").innerHTML
HTML现在已经完全不同了,我还不了解我需要“获取”什么,而不是“ result_box”才能在网站上找到翻译的文本。
如果有人可以帮助我找出哪些代码行将返回带有转换结果的字符串,我将不胜感激。
答案 0 :(得分:2)
您仍然可以使用浏览器来检索翻译信息。这只是为了演示如何抓住右侧的翻译表。
Option Explicit
Public Sub GetInfo()
Dim IE As New InternetExplorer, t As Date, clipboard As Object, ws As Worksheet
Const MAX_WAIT_SEC As Long = 5
Set ws = ThisWorkbook.Worksheets("Sheet1")
Set clipboard = GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
With IE
.Visible = True
.navigate "https://translate.google.com/#view=home&op=translate&sl=auto&tl=en"
While .Busy Or .readyState < 4: DoEvents: Wend
.document.querySelector("#source").Value = "Bonjour"
Dim hTable As HTMLTable
t = Timer
Do
On Error Resume Next
Set hTable = .document.querySelector(".gt-baf-table")
On Error GoTo 0
If Timer - t > MAX_WAIT_SEC Then Exit Do
Loop While hTable Is Nothing
If Not hTable Is Nothing Then
clipboard.SetText hTable.outerHTML
clipboard.PutInClipboard
ws.Cells(1, 1).PasteSpecial
End If
.Quit
End With
End Sub
与您一起检查本地版本HTML右侧翻译表的类名:
从结果框中:
Option Explicit
Public Sub GetInfo()
Dim IE As New InternetExplorer, t As Date, ws As Worksheet
Const MAX_WAIT_SEC As Long = 5
Set ws = ThisWorkbook.Worksheets("Sheet1")
With IE
.Visible = True
.navigate "https://translate.google.com/#view=home&op=translate&sl=auto&tl=en"
While .Busy Or .readyState < 4: DoEvents: Wend
.document.querySelector("#source").Value = "je vous remercie"
Dim translation As Object, translationText As String
t = Timer
Do
On Error Resume Next
Set translation = .document.querySelector(".tlid-translation.translation")
translationText = translation.textContent
On Error GoTo 0
If Timer - t > MAX_WAIT_SEC Then Exit Do
Loop While translationText = vbNullString
ws.Cells(1, 1) = translationText
.Quit
End With
End Sub
答案 1 :(得分:1)
它看起来像是paid service now:
“翻译API
Google还提供了更强大的付费产品。 Translate API可用于驱动Web应用程序以及翻译网站内容。”。
Translation API是易于使用的Google REST API。您不必从文档中提取文本,只需发送HTML文档并获取翻译后的文本即可。”。
翻译:
Google语音:“您不必从文档中提取文字...”。
英语:“您不再不再能够从文档中提取文本了……”。
“有免费配额吗?
不可以,Cloud Translation API仅可作为付费服务使用。有关更多详细信息,请参见Pricing。”
为了避免绕过付费服务,从URL返回的结果现在变得更加scrape更加困难。免费翻译仍然适用于人类。