質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

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

selenium

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

Q&A

解決済

1回答

10425閲覧

Selenium高速化(ページを開く際に待機させない)

abcdefg66adf

総合スコア8

VBA

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

selenium

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

0グッド

2クリップ

投稿2020/08/22 01:33

【環境】Selenium,vba(Excel2010),windows10

【実現したいこと】
VBAのSeleniumからURLを開いた時に、既存設定ではページ読み込み完了まで
待機してしまいます。次の処理でエラーが出ても構わないため、
待機させないようにする。(高速化のため)

【質問】
調べると、以下関数で指定要素を取得するまで待機させることで
高速化する記事がありますが、そうではなく、待機時間を0にする
方法について、助言いただけると助かります。
driver.WaitNotElement
driver.WaitForScript

【一般的なコード】(VBA)
Sub サイト開く()
Dim URL1 As String
Dim driver As New Selenium.WebDriver
driver.Start "chrome"
URL1 = "https://www.google.com/"
driver.Get URL1
Stop 'ここで一時停止
driver.Close
End Sub

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

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

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

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

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

hatena19

2020/08/22 03:32 編集

ページ読み込み完了までまたないと、DOMを取得できませんので、エラー以前に次に何もできません。 driver.WaitNotElement driver.WaitForScript というのはページ読み込み完了後にさらにスクリプト等で動的に読み込んで変更している場合に待機する処理ですので、また、別の話です。 高速化したいなら、「selenium chrome ヘッドレス」あたりをキーワードにググってみるといいかもしれません。
abcdefg66adf

2020/08/22 04:34

回答ありがとうございます。やはり厳しいですか。 なお、 driver.Get URL1 をした後は、Seleniumとは全く別の作業(エクセルの処理)を させるため、何もできなくとも構いません。 ヘッドレスモードも試したものの、私の環境ではほぼ効果が無く、ほかの手段を探しておりました。
abcdefg66adf

2020/08/22 06:55

おお~ まさにこちらがやりたいことです。 "none"を指定できれば、待ち時間0にできそうですね。残念ながらVBAの記述例はなく、もう少し調べてみます。
guest

回答1

0

ベストアンサー

hatena19さんのコメントを参考に 実装してみました

VBA

1Sub test() 2 3 4 Dim Driver As New Selenium.WebDriver 5 6 With Driver 7 .SetCapability "pageLoadStrategy", "none" 8 9 .Start "chrome" 10 .Get "https://www.google.com/" 11 End With 12 13 14 CUR_URL = Driver.Url 15 16 MsgBox CUR_URL 17 18 19End Sub

実行すると
https://www.google.com/ 】ではなく
【data;】とでます

流れ

① 【pageLoadStrategy】をググる
ページ読み込み戦略 :: Seleniumドキュメント
他言語での 記述を確認
【Python】のサンプルコード
options = Options()
options.page_load_strategy = 'none' から
VBAでの Options() の記述の仕方を 探してみる

② 【vba selenium options chrome】をググる
ヘッドレス ChromeをSeleniumBasicで動かしてみました ...
「以前書いた記事では、.Net用のSeleniumを使い「ChromeOptions」でヘッドレスモードを指定したのですが、SeleniumBasicではChromeOptionsが用意されていないようです。
どうすれば良いのか一瞬迷いましたが、「AddArgument」で普通にヘッドレス用のオプションを指定すれば良いようです。」
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Capabilities & ChromeOptions - WebDriver for Chrome
「Recognized capabilities
Please see Selenium documentation and W3C WebDriver standard for standard capabilities accepted by ChromeDriver. Here we only list Chrome-specific capabilities.
ChromeOptions object
Most Chrome-specific capabilities are exposed through the ChromeOptions object. In some languages, this is implemented by the ChromeOptions class. In other languages, they are stored under the goog:chromeOptions dictionary in desired capabilities.」

【Ruby】コードの
「caps = Selenium::WebDriver::Remote::Capabilities.chrome(
"goog:chromeOptions" => {"args" => [ "window-size=1000,800" ]})
driver = Selenium::WebDriver.for :chrome, desired_capabilities: caps」から
「AddArgument」と「desired_capabilities」が
キーワードとなるのではないかと 推測

③ VBEで
Dim Driver As New Selenium.WebDriver
Driver
と入力し、次に ピリオドを打鍵
すると
入力候補一覧が 表示されるので
スクロールして 確認
ここでは
【AddArgument】 と 【SetCapability】
が 使えそうではないかと 目星を付ける

④ 【addargument pageLoadStrategy】と【SetCapability pageLoadStrategy】を ググる
Page load strategy for Chrome driver (Updated till Selenium ...
「dcap.setCapability("pageLoadStrategy", "normal");」から
VBEに
Driver.SetCapability( "pageLoadStrategy", "none")
と入力
エラーなので
Driver.SetCapability "pageLoadStrategy", "none" として
コンパイル & 実行

投稿2020/08/22 11:31

編集2020/08/23 02:44
Reach

総合スコア735

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

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

abcdefg66adf

2020/08/23 00:22

おお~回答ありがとうございました。 実はpageLoadStrategyを色々調べましたが、実装方法がわからず実現できておりませんでした。 無事解決できました! 今後の参考に教えていただきたいのですが、今回のように他言語での解決ソースコードはあるが、 VBAのコードがない場合、どのような解決アプローチで情報検索、テスト実装するイメージでしょうか。 ABCさんがどのように考え、解決方法に至ったのか、ぜひ教えていただきたいです。
abcdefg66adf

2020/08/23 03:28

非常に事細かに思考プロセスを教えていただきありがとうございます。 どこが肝になりそうか、フォーカスを絞っていく過程が大変参考になりました。 私も同じ検索を試し、自分の力にできればなと思います。 今回はありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問