dポイントプレゼントキャンペーン実施中!

Google翻訳に英文を書き込み、和訳の文字列を取得したいと考えています。
まず、書き込む部分までのコードとして次のようなものを考えましたが、上手く行きません。
どのように、改善すれば良いかわかる方イラッシャイましたら、ご指南の程宜しくお願い致します。
WebBrowserは、IE11に変更しています。
Public Class FormMain
Const GoogleUri As String = "https://translate.google.co.jp/?hl=ja&tab=TT"
Const MyStr As String = "Two important properties of the Chart class are the Series and ChartAreas properties, both of which are collection properties. The Series collection property stores Series objects, which are used to store data that is to be displayed, along with attributes of that data. The ChartAreas collection property stores ChartArea objects, which are primarily used to draw one or more charts using one set of axes."
Const myStr1 As String = "text-dummy"
Const myStr2 As String = "text-wrap tlid-copy-target"

Private Sub FormMain_Load(sender As Object, e As EventArgs) Handles Me.Load
Me.WebBrowser1.Navigate(GoogleUri)
End Sub
Private Sub WebBrowser1_DocumentCompleted(sender As Object, e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
If e.Url.ToString = GoogleUri Then
Dim MyElements As HtmlElementCollection = WebBrowser1.Document.GetElementsByTagName("div")
For Each LopElement As HtmlElement In MyElements
If LopElement.GetAttribute("className") = myStr1 Then
LopElement.InnerText = MyStr
MsgBox(LopElement.OuterHtml)
End If
Next
End If
End Sub
End Class

A 回答 (2件)

こんばんは、


スクレ―ピングを行いたいのだと思います。
参考になるかもと思い、以前作成したサンプルを投稿しますが、ご質問のようにClassとしたものでなく、A1セルの値(英文)を投げて翻訳された文字列を取得するプロシージャです。
翻訳順位を調整する場合は、ターゲットタグを調整する必要があると思います。
当方の都合で今週は、検証などが困難な為、Callで行けそうですが、Classにすることが必須であれば自身で書き換えてください。

Option Explicit
Sub translate_google_sample()
  Dim objIE As InternetExplorer
  Dim objtag As Object
  Dim Eng As String, msg As String
  Dim elm As Object, i As Long, flag As Boolean
  On Error Resume Next
  If ActiveSheet.Range("A1") = "" Then
    MsgBox ("A1セルに入力してください?")
    Exit Sub
  End If
  Set objIE = CreateObject("InternetExplorer.Application")
  objIE.Visible = False
  objIE.navigate "https://translate.google.co.jp/?oe=utf-8&hl=ja&u …
  Call IEWait(objIE)  'IEを待機
  Call WaitFor(2)  '2秒停止
  Eng = ActiveSheet.Range("A1")
  For Each objtag In objIE.document.getElementsByTagName("textarea")
    If InStr(objtag.ID, "source") > 0 Then
      objtag.Value = Eng
      Exit For
    End If
  Next
  Call WaitFor(2)
  flag = False
  For Each elm In objIE.document.getElementsByTagName("span")
    If elm.innerText Like "翻訳しています...*" Then
      i = 1
    End If
    If flag = True Then
      'Debug.Print elm.innerText
      msg = elm.innerText
      Exit For
      flag = False
    End If
    If i = 1 Then flag = True
  Next
  objIE.Quit
  objIE.Visible = True
  Set objIE = Nothing

  MsgBox (msg)

End Sub
Function IEWait(ByRef objIE As Object)
  Do While objIE.Busy = True Or objIE.readyState <> 4
    DoEvents
  Loop
End Function
Function WaitFor(ByVal second As Integer)
  Dim futureTime As Date
   futureTime = DateAdd("s", second, Now)
   While Now < futureTime
    DoEvents
  Wend
End Function

Call WaitFor(2)は、通信環境などで調整してください。
    • good
    • 0
この回答へのお礼

有難う御座います。参考にして、VB.netに移植します。
大変助かりました。

お礼日時:2020/10/13 11:58

#1です


Excel VBAでなかったですね。。
よく読んでなかったので、、、ごめんなさいね。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!