从vba打开网站时

时间:2018-12-05 20:27:08

标签: html excel vba web-scraping google-translate

Google翻译不翻译文本(日语到英语)。打开网站并使用以下代码输入文本时,该函数始终返回“”:

Function OutlookGetTransItem(IE As Object, URL As String, trans_text As String) As String
Dim t As Date

If trans_text = "" Then OutlookGetTransItem = trans_text: Exit Function

Const MAX_WAIT_SEC As Long = 5

With IE
    .Visible = True
    .navigate URL

    While .Busy Or .ReadyState < 4: DoEvents: Wend

    .Document.querySelector("#source").Value = trans_text

    Dim translation As Object, translationText As String
    t = Timer
    Do
        On Error Resume Next
        Set translation = .Document.querySelector(".tlid-translation.translation")
        translationText = translation.innerText
        On Error GoTo 0
        If Timer - t > MAX_WAIT_SEC Then Exit Do
    Loop While translationText = vbNullString
    OutlookGetTransItem = translationText
End With
End Function

当我尝试手动单击网站上的翻译箭头/按钮时,IE出现此错误: SCRIPT5025:要解码的URI不是有效的编码 translate_m.js(207,484)

这是我导航到的URL:

https://translate.google.com/#view=home&op=translate&sl=ja&tl=en

以下是我设置为trans_text的文本,该文本是使用其.body属性从Outlook电子邮件中提取的:

关系各位

いつもお世话になっております。     “ 111117_NAM_L42L_TR2k2_3悪_第1部第2部.pdf(议事板书)”を送付いたします。よろしくお愿い致します。

论文:途中 下记13件のスがありフ ォ ロ ーを実施する

エ ン担,プ ロ セ ン ・残渣対応を実施する事(D レ ン ジ ア イ ド​​ ル回転検讨,ア イ ド​​ ル振动デ ー タ入手,制御不具合対応,全ROM定数チ ェ ッ ク,燃料PUMP不具合调查,冷房性能未达対応) ・ T / M IPのFKとFKk2との比较を提示する事 ・ サ ー モ ス タ ッ トのメ ー カ ーを再确认すること ・始动エ ン ス ト チ ェ ッ ク リ ス トの再チ ェ ッ クを実施する事(エ ン ス ト余裕率,パ ー ジの判断,AF / M电源摄取特性) 始动ISC
・不悬残项目の対応を実施する事(车両振动,始动即R セ レ ク ト エ ン ス ト,A / F回転総チ ェ ッ ク,常温始动軽质确认,かぶり,セ レ ク ト ア イ フ ラ,PCV ハ ン チ ン グ确认,即始动确认,押し出され确认) ・ H1を最终仕様でまとめる事 ・各相场チ ェ ッ ク デ ー タの古いL42Lのラ イ ンを削除する事 ・ ブ レ ー キ エ ン ス ト回転低下时の车両振动への影响を确认する事 ・低温始动时のTpを确认する事 ・ ク ラ ン キ ン グ回転数の0℃の目标値の出所を确认する事 台上适合 ・ H2全ROM定数チ ェ ッ クを実施する事 ・不悬残项目の対応を実施する事(R / L サ ー ジ,暖机中ラ フ ア イ ド​​ ル,ロ ジ ッ ク バ グ修正后の确认,ブ ロ ッ ク _ ヘ ッ ト変更后のノ ッ ク确认)                     ・ BCV确认のTH / Cつまりデ ー タの再确认を実施する事(ア ル ミ ボ ア化)

<\ Jp-nml-fs-a01 \ U00 \ PT共通(イフフー)​​\ A01_集约(フリー)\ 3悪格纳フ ォ ル ダ 2 \ 111117_NAM_L42L_TR2k2_3悪>

1 个答案:

答案 0 :(得分:2)

稍微更改您的URL,然后让浏览器处理URL的编码。在这里,我正在从一个单元格中读取您的文本。网站进行翻译时,它会生成一个新URL,该URL的查询字符串参数为text=<your string to translate>。因此,将text=添加到您的起始网址中,并连接成短语进行翻译。

请记住,您需要在某个时候关闭IE实例。我不喜欢以这种方式将IE作为对象传递,并且可能希望将其保存在类Class_Initialize()中生成IE对象的类中。然后,在子类中使用变量实例化该类。

我经常忘记我现在认为合适的导航方法是.navigate2

Option Explicit

Public Sub test()
    Dim ie As InternetExplorer, trans_text As String
    Const URL As String = "https://translate.google.com/#view=home&op=translate&sl=ja&tl=en&text="
    Set ie = New InternetExplorer
    trans_text = [A1].Value
    Debug.Print OutlookGetTransItem(ie, URL, trans_text)
    ie.Quit
End Sub

Public Function OutlookGetTransItem(ByVal ie As Object, ByVal URL As String, ByVal trans_text As String) As String
    Dim t As Date

    If trans_text = vbNullString Then OutlookGetTransItem = trans_text: Exit Function

    Const MAX_WAIT_SEC As Long = 5

    With ie
        .Visible = True
        .navigate2 URL & trans_text

        While .Busy Or .readyState < 4: DoEvents: Wend

        Dim translation As Object, translationText As String
        t = Timer
        Do
            On Error Resume Next
            Set translation = .document.querySelector(".tlid-translation.translation")
            translationText = translation.innerText
            On Error GoTo 0
            If Timer - t > MAX_WAIT_SEC Then Exit Do
        Loop While translationText = vbNullString
        OutlookGetTransItem = translationText
    End With
End Function