EXCEL VBAでGoogleChromeの新規タブを開くが動作しません

3,737 views
Skip to first unread message

Takeshi Ueshima

unread,
Oct 26, 2018, 9:24:15 PM10/26/18
to 日本Seleniumユーザーコミュニティ
はじめまして。
EXCEL2013/32Bit環境でGoogleChromeの新規タブを開きたく調査していますが、動作しません。
使用環境
SeleniumBasic     2.0.9.0
GoogleChromeDriver     ChromeDriver 2.43

実現したいこと
  新規タブを追加したい。

テストしたこと。以下のマクロで動作を確認しました。

    Dim driver As New Selenium.ChromeDriver
    Dim keys As New keys
    Dim win As Variant
    driver.Start
    driver.Get ("https://amazon.co.jp")    'Amazon Japan
    driver.FindElementById(twotabsearchtextbox).SendKeys "xxxxxxxxxx"     ' 
    driver.FindElementByClass(nav-input).Click
    Set win = driver.FindElementById(twotabsearchtextbox)
    win.SendKeys (keys.Control + "a")  " 正しく動作します
    win.SendKeys (keys.Control + "x")  " 正しく動作します
    win.SendKeys (keys.Control + "v")  " 正しく動作します
    win.SendKeys (keys.Control + "a")  " 正しく動作します
    win.SendKeys (keys.Control + "t")  " 動作しません
    win.SendKeys (keys.Enter)      " 正しく動作します

GoogleChromeを立ち上げます。
日本Amaazonを呼び出し、検索画面に値を入力し、検索ボタンを押します。
その後新規タブを開きたく、
     win.SendKeys (keys.Control & "t")  
で「Ctrl+t」を入力しましたが、画面は変化有りません。
SendKeyが動作しないのか確認の為他の文字を入力したところ正しく動作しています。
どのようにすれば新規タブが開くか、ご存知の方は教えていただけないでしょうか。
 宜しくお願いします。

タカミテツロウ

unread,
Oct 27, 2018, 6:44:48 AM10/27/18
to selen...@googlegroups.com
こんにちは

当方 環境では
新規タブを開き移動するには

 driver.ExecuteScript ("window.open()")
 driver.SwitchToNextWindow

また、検索結果を別タブで開くには

Set elem = driver.FindElementByClass("nav-input")
elem.SendKeys (keys.Control + keys.Enter)
driver.SwitchToNextWindow

です

ともに、前のタブに戻るには

driver.SwitchToPreviousWindow

でしたよ

Takeshi Ueshima

unread,
Oct 27, 2018, 8:21:13 AM10/27/18
to 日本Seleniumユーザーコミュニティ
ご返事ありがとうございます。
実は
  driver.ExecuteScript ("window.open()")
既に確認いたしました。
この命令を実行したところ、動作しないので諦めています。
この命令を実行すると
 
実行時エラー'13'

UnknowError
unkonwn error:Window.Open is not a function

となります。
このために 「driver.ExecuteScript ("window.open()")」を諦め「CTRL+t」で新しいタブが開かないか確認していました。
ExcelのVBAで  driver.ExecuteScript ("window.open()") を使用するために何らかの準備が必要なのでしょうか。
よろしくお願いします。



2018年10月27日土曜日 19時44分48秒 UTC+9 タカミテツロウ:

タカミテツロウ

unread,
Oct 28, 2018, 2:51:21 AM10/28/18
to Takeshi Ueshima, selen...@googlegroups.com
unkonwn error:Window.Open is not a function  について 対処法が 不明でしたので
別のアプローチで 新規タブを 開いてみました (当方環境が 32 bitではないので 検証できずですが ) 

#If VBA7 And Win64 Then
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal ms As LongPtr)
Private Declare PtrSafe Function FindWindow Lib "USER32" Alias "FindWindowA" _
            (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare PtrSafe Function GetWindow Lib "USER32" ( _
        ByVal hWnd As LongPtr, _
        ByVal wCmd As Long) As LongPtr
        
Private Declare PtrSafe Function SetForegroundWindow Lib "USER32" ( _
    ByVal hWnd As LongPtr) As Long

#Else
Private Declare Sub Sleep Lib "kernel32" (ByVal ms As Long)
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA"
    (ByVal lpClassName As String, ByVal lpWindowName As String)
    As Long
Private Declare Function GetWindow  Lib "user32" _
    (ByVal hwnd As Long, ByVal wCmd As Long) _
    As Long
Private Declare Function SetForegroundWindow Lib "user32"
        (ByVal hwnd As Long) As Long
#End If

Sub Test()

    Dim driver As New Selenium.ChromeDriver
    Dim keys As New keys
  
    
  
    driver.Start
    driver.Get ("https://amazon.co.jp")    'Amazon Japan
    'GoTo sk:
    driver.FindElementById("twotabsearchtextbox").SendKeys "xxxxxxxxxx"
   
  ’ここは テスト用で 不要
    'VBA.AppActivate Excel.Application.Caption
    'Sleep 1500
       
    'Chromeにフォーカス ?
    hWnd = FindWindow("Chrome_WidgetWin_1", vbNullString)
    chwnd = GetWindow(chwnd, 2)
    Sleep 500
    ret = SetForegroundWindow(chwnd)
    Sleep 500
    
sk:
    ' 新規タブを開く
    SendKeys "^(t)"
    '新規タブに移動して Amazon.comを 表示
    driver.SwitchToNextWindow
    driver.Get ("https://amazon.com")
    
    For i = 1 To 3000
        Sleep 1
        DoEvents
    Next i
   
    ' 前のタブに戻る
    driver.SwitchToPreviousWindow
     
      
   Sleep (3000)

End Sub

driver.FindElementById("twotabsearchtextbox").SendKeys "xxxxxxxxxx" があるときは
上記で 動作するのですが
ない場合は
  'GoTo sk:  を コメントアウトすると 動くみたいです



2018年10月27日(土) 21:21 Takeshi Ueshima <tueshi...@gmail.com>:
--
このメールは Google グループのグループ「日本Seleniumユーザーコミュニティ」に登録しているユーザーに送られています。
このグループから退会し、グループからのメールの配信を停止するには seleniumjp+...@googlegroups.com にメールを送信してください。
このグループに投稿するには selen...@googlegroups.com にメールを送信してください。
その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。

Takeshi Ueshima

unread,
Oct 28, 2018, 9:42:15 PM10/28/18
to 日本Seleniumユーザーコミュニティ
懇切丁寧な情報を有難うございます。
早速試してみましたが、残念なことに新規タブが開くことが確認できませんでした。
マクロは特にエラーになることもなく終了しています。

以下のコードですが "Chrome_WidgetWin_1", の値は動かす環境で変更する必要がありますでしょうか。

タカミテツロウ

unread,
Oct 28, 2018, 10:59:20 PM10/28/18
to Takeshi Ueshima, selen...@googlegroups.com
>  以下のコードですが "Chrome_WidgetWin_1", の値は動かす環境で変更する必要がありますでしょうか
正直、解りません


 確認してしていただきたいことがあります  

1. hWnd = FindWindow("Chrome_WidgetWin_1", vbNullString) の後に
   MsgBox (hWnd) 
  を 追加して場合 、hWnd の値は 何でしょうか?

2.  マクロを使用せず、Chromeを 起動して、 【CTRL + t 】を 押下して
     新規タブは 開きますでしょうか?

3. 以下のコード で 新規タブは 開きませんでしょうか?

 #If VBA7 Then
  Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal ms As LongPtr)

  Private Declare PtrSafe Sub keybd_event Lib "user32" ( _
    ByVal bVk As Byte, _
    ByVal bScan As Byte, _
    ByVal dwFlags As Long, _
    ByVal dwExtraInfo As Long)

#Else
  Private Declare Sub Sleep Lib "kernel32" (ByVal ms As Long)

  Private Declare Sub keybd_event Lib "user32" ( _
  ByVal bVk As Byte, _
  ByVal bScan As Byte, _
  ByVal dwFlags As Long, _
  ByVal dwExtraInfo As Long)
#End If

Sub Test2()

    Dim driver As New Selenium.ChromeDriver
    Dim keys As New keys
    
    Const CONTROL_KEY      As Long = &H11     'CtrlキーUp
    Const T_KEY            As Long = &H54   'T
   
    driver.Start
    driver.Get ("https://amazon.co.jp")    'Amazon Japan
    driver.FindElementById("twotabsearchtextbox").SendKeys "xxxxxxxxxx"     
       
  

    keybd_event CONTROL_KEY, 0, 0, 0    ' CTRL キーを押す
    keybd_event T_KEY, 0, 0, 0          ' T キーを押す
  
    keybd_event T_KEY, 0, 2, 0           'Tキーを離す
    keybd_event CONTROL_KEY, 0, 2, 0     'CTRLキーを離す
  
    Sleep (5000)

End Sub 


(このあたりが 当方の限界です)

よろしく お願い致します

2018年10月29日(月) 10:42 Takeshi Ueshima <tueshi...@gmail.com>:

Takeshi Ueshima

unread,
Oct 28, 2018, 11:58:52 PM10/28/18
to 日本Seleniumユーザーコミュニティ
ご丁寧にありがとうございます。
解決いたしました。
昨日頂いたマクロの中で
     SendKeys "^(t)"
     SendKeys "^t"
に変更したところ、新しいタブを開くことができました。
貴重な情報を有難うございました。

タカミテツロウ

unread,
Oct 29, 2018, 12:29:46 AM10/29/18
to Takeshi Ueshima, selen...@googlegroups.com
解決して よかったですね

参考までに 知りたいのですが
先ほどの Test2 では 新規タブは 開きますでしょうか?

お手数を お掛けしますが
よろしく お願い致します

2018年10月29日(月) 12:58 Takeshi Ueshima <tueshi...@gmail.com>:
--

Takeshi Ueshima

unread,
Oct 29, 2018, 6:19:01 AM10/29/18
to 日本Seleniumユーザーコミュニティ
ご連絡ありがとうございます。

今Test2を実行しましたが、新しいタブは開きませんでした。
大変お世話になり有難うございました。
Reply all
Reply to author
Forward
0 new messages