🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

Q&A

解決済

2回答

5294閲覧

AccessからSeleniumでブラウザ起動時に固まってしまう

hodagiri

総合スコア21

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

0グッド

0クリップ

投稿2021/01/14 05:58

編集2021/05/24 08:28

##発生している問題・エラーメッセージ
access2013からSeleniumを使用してchromeを操作しようと以下のソースコードを実行すると
たまにStartメソッドを実行するとそのままAccessが固まってしまって何も操作できなくなります。
Sample2ではStartメソッドをコメントアウトして実行してみてもGetメソッド時に同様にためなときは固まってしまいます。
msgboxで表示中のようにクリックしても無反応です。

一旦固まると一晩(8時間以上)たってもそのままでした。

結局タスクマネージャーから強制終了してから再度起動しないといけません。

なにかChrome起動やアタッチなどのタイムアウト等の設定があるのでしょうか

###試したこと
sample1を実行してうまくいくときはChroemが起動されてヤフーのページが表示されます。
だめなときにはchromeも起動せずかたまります。

sample2を実行してうまくいくときは起動済みのChroemにヤフーのページが表示されます。
だめなときにはchromeには変化ありません。

更にsample2の以下を変更してみたが
Set driver = CreateObject("Selenium.ChromeDriver")
driver.SetCapability "debuggerAddress", "127.0.0.1:9222"
Driver.Start
Driver.Get "https://www.yahoo.co.jp/"

Set driver = CreateObject("Selenium.WebDriver")
driver.SetCapability "debuggerAddress", "127.0.0.1:9222"
Driver.Start "chrome",[Webドライバーフルパス]
Driver.Get "https://www.yahoo.co.jp/"

結果同じくたまに固まってしまいます。

またchrome起動後にポート使用可能になるまで待つように
WaitPortUse(9222)
の処理を入れましたが若干頻度は落ちましたが、やはりたまに固まります。

固まる場合はchromeが

ちなみに参照設定しないのはSeleniumを入れていないPCもあるので動作的に使用しています。

#該当のソースコード

Sub sample1()
Dim Driver As Object
Set driver = CreateObject("Selenium.ChromeDriver")
Driver.Start "chrome"
Driver.Get "https://www.yahoo.co.jp/"
stop
End Sub

Sub sample2()
Dim Driver As Object
Dim hwnd As Integer
Dim i As Integer
Shell chromeのフルパス & " -remote-debugging-port=9222 --user-data-dir=C:\Temp_ForChrome"

'Chrome表示待ち
hwnd = FindWindow("Chrome_WidgetWin_1", "新しいタブ - Google Chrome")
Do While hwnd = 0
For i = 1 To 5
Sleep 1000
DoEvents
Next
hwnd = FindWindow("Chrome_WidgetWin_1", "新しいタブ - Google Chrome")
Loop
Do While IsWindowVisible(hwnd) = 0
For i = 1 To 5
Sleep 1000
DoEvents
Next
Loop

Set driver = CreateObject("Selenium.ChromeDriver")
driver.SetCapability "debuggerAddress", "127.0.0.1:9222"
Driver.Start
Driver.Get "https://www.yahoo.co.jp/"

End Sub

'指定ポートが反応あるまで待つ
Public Function WaitPortUse(longPort As Long) As Integer
Dim strFile As String
Dim strWork As String
Dim obj2 As Object
Dim obj3 As Object
Dim i As Integer
On Error Resume Next
'Chromeに通信できるか確認
strFile = "c:\log\NetConnection.log"
Set obj2 = CreateObject("WScript.Shell")
obj2.Run "powershell -NoLogo -ExecutionPolicy RemoteSigned -Command Test-NetConnection 127.0.0.1 -port " & longPort & " > " & strFile, 0, True
Do While 1
'UTF-8テキストファイルを開く
Set obj3 = CreateObject("ADODB.Stream")
obj3.Type = adTypeText
'file1.Charset = "shift-jis"
obj3.Charset = "utf-8"
obj3.LineSeparator = adCRLF ' 改行コードの指定 -1: CRLF, 10: LF, 13: CR
obj3.Open
Call obj3.LoadFromFile(strFile)

strWork = obj3.ReadText(adReadLine) Do While InStr(1, strWork, " ", vbTextCompare) <> 0 strWork = Replace(strWork, " ", "", , , vbTextCompare) Loop Do While InStr(1, strWork, Chr(0), vbTextCompare) <> 0 strWork = Replace(strWork, Chr(0), "", , , vbTextCompare) Loop Set obj3 = Nothing If InStr(1, strWork, "TcpTestSucceeded:True", vbTextCompare) <> 0 Then Exit Do End If For i = 1 To 20 Sleep 1000 DoEvents Next obj2.Run "powershell -NoLogo -ExecutionPolicy RemoteSigned -Command Test-NetConnection 127.0.0.1 -port " & longPort & " > " & strFile, 0, True Loop Set obj2 = Nothing

End Function

chromeとWebDriverのバージョンは同じでした
複数のPCで同じ現象が発生したことがあります。OSのWindowsは8.1や10(x64,x86も混在)などまちまちです。
Accessも2013,2016(32ビット)とそのPCによって違いますが同じ現象が発生しました

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

結局100%ではなかったのでSeleniumBasicのソースをダウンロードして
.netFramework4.71を使用するに選択してVisualStdio2017でリビルト。
それを使用したら止まらなくなりました。

投稿2021/11/15 08:53

hodagiri

総合スコア21

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

解決かどうかわかりませんが以下の方法で固まらなくなりました。

Set driver = CreateObject("Selenium.ChromeDriver")
driver.SetCapability "debuggerAddress", "127.0.0.1:9222"
Driver.SetBinary [SeleniumBasicインストールパス]\chromedriver.exe
Driver.Start
Driver.Get "https://www.yahoo.co.jp/"

SetBinary は本来はブラウザの実行バイナリを指定するものですが、
ここにChrome.exeを指定した場合はたまに固まります。(頻度はいままでより断然低いです。)
なぜWebドライバーのバイナリを読み込んで固まらなくなったのかわかりませんが、1度もかたまりませんでした。

ちなみににSeleniumBasicインストールパス取得方法は以下です
Const C_REG_KEY As String = "HKCU\Software\Microsoft\Windows\CurrentVersion\Uninstall{0277FC34-FD1B-4616-BB19-1FDB7381B291}_is1\InstallLocation"
Dim wshell As Object
'シェルオープン
Set wshell = CreateObject("WScript.Shell")
'レジストリキー指定
strKey = C_REG_KEY
'SeleniumBasicインストールパス取得
strPath = wshell.regread(strKey) ', "REG_DWORD")
Set wshell = Nothing

ご参考までに

投稿2021/06/23 04:01

hodagiri

総合スコア21

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問