前提
このサイトのお陰でようやく完成間近というところまでたどり着けました。
教えてくれた方々に感謝申し上げたいと思います。
エクセルVBAでセレニウムを使ってツールを作っています。
機能としては、アリエクスプレスというサイトで複数人の住所などの顧客情報の入力を自動で処理するというものです。
住所氏名を入力するコードが全く同じなので、サブルーチンにまとめておいて、メインルーチンでは呼び出すようにしています。
サブルーチンは同じモジュールの中の別のプロシージャに記入しています。(僕の理解が正しければ)
ここで問題が起こりまして、
サブルーチンの中でセレニウムを使用しているのですが、「ブラウザが立ち上がっていない」というエラーが出てしまいました。
ブラウザはchromeをメインルーチンの方で立ち上げているので、サブルーチンの処理もそちらで動いてほしいのですが、
具体的にどのようにすればできるのかが分かりませんでした。
サブルーチンの中でブラウザを立ち上げると、当然ながらメインで立ち上げたものと別のウィンドウが立ち上がってしまいます。
同じプロシージャ内でないと動作させられないのでしょうか?
発生している問題・エラーメッセージ
実行時エラー57 Browser NotStartedError (コードを追加してサブの方でブラウザを立ち上げた場合はこのエラーは出ませんが、メインのブラウザでの動作をしてくれません)
該当のソースコード
Public Const sht1 = "アリエク発送自動化" Sub test() Dim Driver As New Selenium.WebDriver Dim i As Long Dim ky As New Keys SafeOpen Driver, Chrome Driver.Get ("https://login.aliexpress.com/?spm=a2g0o.cart.0.0.699938daanKXzt&return_url=https://www.aliexpress.com/p/shoppingcart/index.html") Driver.Wait 2000 'ログイン作業 Driver.FindElementByXPath("//*[@id=""fm-login-id""]").SendKeys "inaba.dangan@gmail.com" Driver.Wait 1000 Driver.FindElementByXPath("//*[@id=""fm-login-password""]").SendKeys "inaba178" Driver.Wait 1000 Driver.FindElementByXPath("//*[@id=""root""]/div/div/div/div[2]/div/div/button[2]").Click Driver.Wait 1000 'カート画面遷移 Driver.Get ("https://www.aliexpress.com/p/shoppingcart/index.html") Driver.Wait 1000 'チェックボックス入れて支払い画面へ(エラーが出るか判別) On Error Resume Next Driver.FindElementByXPath("//*[@id=""root""]/div[1]/div[1]/div[1]/div[3]/div/div/div/div[2]/div/div[1]/label/span").Click Dim tryCnt As Long Do Until Err.Number = 0 Or tryCnt > 10 Err.Clear '画面戻る Driver.Get ("https://login.aliexpress.com/?spm=a2g0o.cart.0.0.699938daanKXzt&return_url=https://www.aliexpress.com/p/shoppingcart/index.html") 'エラーがでた時の再ログイン作業 Driver.FindElementByXPath("//*[@id=""fm-login-id""]").SendKeys "inaba.dangan@gmail.com" Driver.Wait 1000 Driver.FindElementByXPath("//*[@id=""fm-login-password""]").SendKeys "inaba178" Driver.Wait 1000 Driver.FindElementByXPath("//*[@id=""root""]/div/div/div/div[2]/div/div/button[2]").Click Driver.Wait 5000 'ログインできたか確認(エラーが出るか判別) Driver.FindElementByXPath("//*[@id=""root""]/div[1]/div[1]/div[2]/div[1]/button").Click tryCnt = tryCnt + 1 Loop On Error GoTo 0 If tryCnt > 10 Then MsgBox "ログインできませんでした。時間をおいて再実行してください。" '終了処理 Exit Sub End If '適当な商品ページで「今すぐ購入」クリック Driver.Get ("https://ja.aliexpress.com/item/32949200824.html?spm=a2g0o.home.15002.7.16e15c72CwbPw8&gps-id=pcJustForYou&scm=1007.13562.295723.0&scm_id=1007.13562.295723.0&scm-url=1007.13562.295723.0&pvid=24400eae-f11a-4ac8-a7cb-11308f45b5e6&_t=gps-id:pcJustForYou,scm-url:1007.13562.295723.0,pvid:24400eae-f11a-4ac8-a7cb-11308f45b5e6,tpp_buckets:668%232846%238112%231997&pdp_ext_f=%7B%22sku_id%22%3A%2266267678540%22%2C%22sceneId%22%3A%223562%22%7D&pdp_npi=2%40dis%21JPY%215562.0%215562.0%21%21%21%21%21%40210312ee16665530488997739e5253%2166267678540%21rec&curPageLogUid=h1TA7Ae1XNTz") Driver.FindElementByXPath("//*[@id=""root""]/div/div[2]/div/div[2]/div[10]/span[1]/button").Click '住所編集画面開く Driver.FindElementByXPath("//*[@id=""placeorder_wrap__inner""]/div/div[1]/div[1]/div/div[2]/span/a").Click Driver.Wait 2000 '住所開く① Driver.FindElementByXPath("/html/body/div[9]/div[2]/div/div[2]/div[2]/div/div[1]/div[1]/div/div[2]/div[2]/span[1]/a").Click Driver.Wait 3000 '住所書き換え S_Macro1 '住所開く② Driver.FindElementByXPath("/html/body/div[9]/div[2]/div/div[2]/div[2]/div/div[1]/div[2]/div/div[2]/div[2]/span[1]/a").Click Driver.Wait 3000 '住所書き換え S_Macro1 '住所開く③ Driver.FindElementByXPath("/html/body/div[9]/div[2]/div/div[2]/div[2]/div/div[1]/div[3]/div/div[2]/div[2]/span[1]/a").Click Driver.Wait 3000 '住所書き換え S_Macro1 '住所開く④ Driver.FindElementByXPath("/html/body/div[9]/div[2]/div/div[2]/div[2]/div/div[1]/div[4]/div/div[2]/div[2]/span[1]/a").Click Driver.Wait 3000 '住所書き換え S_Macro1 '住所開く⑤ Driver.FindElementByXPath("/html/body/div[9]/div[2]/div/div[2]/div[2]/div/div[1]/div[5]/div/div[2]/div[2]/span[1]/a").Click Driver.Wait 3000 '住所書き換え S_Macro1 '住所開く⑥ Driver.FindElementByXPath("/html/body/div[9]/div[2]/div/div[2]/div[2]/div/div[1]/div[6]/div/div[2]/div[2]/span[1]/a").Click Driver.Wait 3000 '住所書き換え S_Macro1 '住所開く⑦ Driver.FindElementByXPath("/html/body/div[9]/div[2]/div/div[2]/div[2]/div/div[1]/div[7]/div/div[2]/div[2]/span[1]/a").Click Driver.Wait 3000 '住所書き換え S_Macro1 '住所開く⑧ Driver.FindElementByXPath("/html/body/div[9]/div[2]/div/div[2]/div[2]/div/div[1]/div[8]/div/div[2]/div[2]/span[1]/a").Click Driver.Wait 3000 '住所書き換え S_Macro1 '住所開く⑨ Driver.FindElementByXPath("/html/body/div[9]/div[2]/div/div[2]/div[2]/div/div[1]/div[9]/div/div[2]/div[2]/span[1]/a").Click Driver.Wait 3000 '住所書き換え S_Macro1 '住所開く⑩ Driver.FindElementByXPath("/html/body/div[9]/div[2]/div/div[2]/div[2]/div/div[1]/div[10]/div/div[2]/div[2]/span[1]/a").Click Driver.Wait 3000 '住所書き換え S_Macro1 Stop End Sub ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (ここからサブルーチンです) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Sub S_Macro1() Dim Driver As New Selenium.WebDriver Dim ky As New Keys '住所書き換え関数 '氏名 Driver.Keyboard.KeyDown (ky.Control) Driver.FindElementByXPath("//*[@id=""halo-wrapper-root""]/div/div/form/div[2]/div[2]/div/div[1]/div/div/span/input").SendKeys "a" Driver.Keyboard.KeyUp (ky.Control) Driver.Wait 100 Driver.FindElementByXPath("//*[@id=""halo-wrapper-root""]/div/div/form/div[2]/div[2]/div/div[1]/div/div/span/input").SendKeys (ky.Delete) Driver.Wait 100 Driver.FindElementByXPath("//*[@id=""halo-wrapper-root""]/div/div/form/div[2]/div[2]/div/div[1]/div/div/span/input").SendKeys Range("C2") Driver.Wait 100 Driver.FindElementByXPath("//*[@id=""halo-wrapper-root""]/div/div/form/div[2]/div[2]/div/div[1]/div/div/span/input").SendKeys " " Driver.Wait 100 Driver.FindElementByXPath("//*[@id=""halo-wrapper-root""]/div/div/form/div[2]/div[2]/div/div[1]/div/div/span/input").SendKeys Range("D2") Driver.Wait 600 '電話番号 Driver.Keyboard.KeyDown (ky.Control) Driver.FindElementByXPath("//*[@id=""halo-wrapper-root""]/div/div/form/div[2]/div[2]/div/div[2]/div/div/span/span[2]/input").SendKeys "a" Driver.Keyboard.KeyUp (ky.Control) Driver.Wait 100 Driver.FindElementByXPath("//*[@id=""halo-wrapper-root""]/div/div/form/div[2]/div[2]/div/div[2]/div/div/span/span[2]/input").SendKeys (ky.Delete) Driver.Wait 100 Driver.FindElementByXPath("//*[@id=""halo-wrapper-root""]/div/div/form/div[2]/div[2]/div/div[2]/div/div/span/span[2]/input").SendKeys Range("I2") Driver.Wait 600 '郵便番号 Driver.Keyboard.KeyDown (ky.Control) Driver.FindElementByXPath("//*[@id=""halo-wrapper-root""]/div/div/form/div[3]/div[2]/div[1]/div[1]/div/div/span/span[1]/input").SendKeys "a" Driver.Keyboard.KeyUp (ky.Control) Driver.Wait 100 Driver.FindElementByXPath("//*[@id=""halo-wrapper-root""]/div/div/form/div[3]/div[2]/div[1]/div[1]/div/div/span/span[1]/input").SendKeys (ky.Delete) Driver.Wait 100 Driver.FindElementByXPath("//*[@id=""halo-wrapper-root""]/div/div/form/div[3]/div[2]/div[1]/div[1]/div/div/span/span[1]/input").SendKeys Range("E2") Driver.Wait 2000 Driver.FindElementByXPath("/html/body/div[10]/div/ul/li/div/span/div").Click Driver.Wait 3000 '番地、建物名 Driver.Keyboard.KeyDown (ky.Control) Driver.FindElementByXPath("//*[@id=""halo-wrapper-root""]/div/div/form/div[3]/div[2]/div[2]/div[2]/div/div/span/input").SendKeys "a" Driver.Keyboard.KeyUp (ky.Control) Driver.Wait 100 Driver.FindElementByXPath("//*[@id=""halo-wrapper-root""]/div/div/form/div[3]/div[2]/div[2]/div[2]/div/div/span/input").SendKeys (ky.Delete) Driver.Wait 100 Driver.FindElementByXPath("//*[@id=""halo-wrapper-root""]/div/div/form/div[3]/div[2]/div[2]/div[2]/div/div/span/input").SendKeys Range("H2") Driver.Wait 600 '建物名削除 Driver.Keyboard.KeyDown (ky.Control) Driver.FindElementByXPath("//*[@id=""halo-wrapper-root""]/div/div/form/div[3]/div[2]/div[2]/div[3]/div/div/span/input").SendKeys "a" Driver.Keyboard.KeyUp (ky.Control) Driver.Wait 100 Driver.FindElementByXPath("//*[@id=""halo-wrapper-root""]/div/div/form/div[3]/div[2]/div[2]/div[3]/div/div/span/input").SendKeys (ky.Delete) Driver.Wait 600 '確認クリック Driver.FindElementByXPath("//*[@id=""halo-wrapper-root""]/div/div/form/div[5]/div/button[1]").Click 'エクセルの一番上の行を削除 Rows(2).Delete End Sub
試したこと
何を試せば良いのか分からなかったで似たような事例を探しましたが、見つけられなかったので質問させて頂きました。
補足情報(FW/ツールのバージョンなど)
Windows10
chrome

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/10/24 17:39