Webページを印刷したい場合、JavaScriptの処理をすれば印刷可能でした。
印刷設定を変更するのも同様に、ExecuteScript で処理をします。
単純に印刷するのと以下が異なります。
- optionの要素をJS上で戻り値returnで取得する
- 上記情報をSelenium側で操作させる(Clickさせる)
Edge/Chromeで印刷設定を行うサンプルコード
Dim driver As New Selenium.WebDriver
Public Sub sample()
Dim str As String
'■ブラウザを起動
driver.Start "chrome" 'Edgeの場合はdriver.start "edge" +下記のJSPathも変更必要
driver.Get "https://vba-create.jp"
'■印刷用ウィンドウを呼出
driver.ExecuteScript "setTimeout(function(){window.print();}, 0);"
driver.Wait 5000
'■印刷ページを「奇数ページ」のみ選択(return を先頭に付与)
str = "return document.querySelector(""body > print-preview-app"").shadowRoot.querySelector(""#sidebar"").shadowRoot.querySelector(""#container > print-preview-pages-settings"").shadowRoot.querySelector(""print-preview-settings-section > div > select > option:nth-child(2)"")"
driver.SwitchToNextWindow
driver.ExecuteScript(str).Click
'■印刷詳細設定を開く(return を先頭に付与)
str = "return document.querySelector(""body > print-preview-app"").shadowRoot.querySelector(""#sidebar"").shadowRoot.querySelector(""#container > print-preview-more-settings"").shadowRoot.querySelector(""div > cr-expand-button"")"
driver.ExecuteScript(str).Click
'■印刷クリックをJSPathをstrに格納
str = "document.querySelector(""body > print-preview-app"").shadowRoot.querySelector(""#sidebar"").shadowRoot.querySelector(""print-preview-button-strip"").shadowRoot.querySelector(""div > cr-button.action-button"").click();"
'■印刷用ウィンドウへ切り替える
driver.ExecuteScript str
'■印刷時間を待つ。
driver.Wait 100000
driver.Close
End Sub
注意点
- JSPathはChromeのVerによって異なる可能性があります。
- JSPathのエラーが出た場合は、Chromeで任意のURL立ち上げた後、以下手順で取得しましょう。
1.Ctrl + P で印刷ダイアログを出す。
2.印刷ダイアログで右クリック→「検証」
3.印刷ボタンのJSPathを取得。 - ShadowRootで要素が選択できない隠れている形になるため、JavaScriptで操作する必要があります。
SeleniumBasicについて
Internet Explorer11 のサポート期限が2022年6月までと、スクレイピング自体入れ替えていく必要があります。
今一番スムーズなのはSeleniumBasicを使用したスクレイピングと考えます。
但し、VBAでのネット記事は少なく困っている方も多いと思います。
弊社で代行開発も可能ですので、お気軽にご用命ください。



コメント