回答編集履歴

4

VBAのコードを追記

2021/04/10 00:28

投稿

退会済みユーザー
test CHANGED
@@ -62,7 +62,7 @@
62
62
 
63
63
 
64
64
 
65
- `driver.execute_script(JavaScript実行文)`と書くことにより、selenium内で任意のJavaScriptを実行できます。
65
+ `driver.execute_script(JavaScript実行文)`と書くことにより、特に参照設定を行わなくとも、selenium内で任意のJavaScriptを実行できます。
66
66
 
67
67
   
68
68
 
@@ -76,7 +76,7 @@
76
76
 
77
77
  ・印刷ボタンをクリックさせるには、setTimeOut関数を使ってwindow.print()を呼び出さないといけない(理由不明)
78
78
 
79
- ・印刷ダイアログは別ウィンドウ扱いなので、switch_to.window() で指定対象を切り替える必要がある。
79
+ ・印刷ダイアログは別ウィンドウ扱いなので、SwitchToNextWindow で指定対象を切り替える必要がある。
80
80
 
81
81
  ・(当然ですが)印刷ダイアログの構築完了前にボタンクリックのJSを実行してしまうとボタンをクリックできないため、一定時間待つ必要がある。
82
82
 
@@ -90,7 +90,59 @@
90
90
 
91
91
 
92
92
 
93
- ```
93
+
94
+
95
+ ```VBA
96
+
97
+ Sub CommandButton1_Click()
98
+
99
+ Dim s As String
100
+
101
+ s = "document.querySelector(""body > print-preview-app"").shadowRoot.querySelector(""#sidebar"").shadowRoot.querySelector(""print-preview-button-strip"").shadowRoot.querySelector(""div > cr-button.action-button"").click();"
102
+
103
+
104
+
105
+ Dim Driver As New Selenium.WebDriver
106
+
107
+ Driver.Start "chrome", "http://www.selenium.jp/test-site"
108
+
109
+ Driver.Get "/"
110
+
111
+
112
+
113
+ Driver.ExecuteScript "setTimeout(function(){window.print();}, 0);"
114
+
115
+ 'VBAの場合十分な時間待たないと失敗する。
116
+
117
+ Driver.Wait (10000)
118
+
119
+
120
+
121
+ Driver.SwitchToNextWindow
122
+
123
+ Driver.ExecuteScript s
124
+
125
+
126
+
127
+ 'VBAの場合Closeで勝手に閉じるので十分な時間WAIT。
128
+
129
+ Driver.Wait (20000)
130
+
131
+ Driver.Close
132
+
133
+
134
+
135
+ End Sub
136
+
137
+ ```
138
+
139
+
140
+
141
+ -------------
142
+
143
+ (参考)下記は検証に用いた(上のVBAコードの元にした)pythonスクリプトです。
144
+
145
+ ```python
94
146
 
95
147
  from selenium import webdriver
96
148
 

3

修正

2021/04/10 00:28

投稿

退会済みユーザー
test CHANGED
@@ -116,13 +116,13 @@
116
116
 
117
117
 
118
118
 
119
- '''印刷できない場合は印刷ダイアログの構築完了前に要素を選択してしまってい
119
+ '''印刷ダイアログの構築完了前に要素を選択してしまう場合があため、
120
120
 
121
- 可能性があるため、下記time.sleepをコメントアウトして印刷ダイアログの完全表示まで強制的
121
+ 下記time.sleep印刷ダイアログの完全表示まで強制的
122
122
 
123
123
  にウェイトをかけています。
124
124
 
125
- driver.implicitly_wait(10)だけではうまく行かない場合があるため、time.sleepでさらに待機ています。
125
+ driver.implicitly_wait(10)だけではうまく行かない場合があるため、time.sleepを使用して強制的に待機させています。
126
126
 
127
127
  なくてもうまく動くなら削除して構いません。
128
128
 

2

修正

2021/04/09 17:09

投稿

退会済みユーザー
test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- Selenium上で印刷ダイアログは下の画像のように、印刷元のページに#shadow-rootというID特別に差し込まれた形になってます。
5
+ selenium上で印刷ダイアログを表示させた場合下の画像のように、印刷元のページに#shadow-rootというID特別に差し込まれた形になます。
6
6
 
7
7
  ![イメージ説明](d802f362938a310c764c2eae530f83b2.png)
8
8
 
@@ -74,9 +74,9 @@
74
74
 
75
75
  キモとなる点というか、たどり着くのに苦労した点は
76
76
 
77
- ・印刷ダイアログ表示するにはwindow.printはsetTimeOut 使わないといけない(理由不明)
77
+ ・印刷ボタンクリックさせるには、setTimeOut関数を使ってwindow.print()呼び出さないといけない(理由不明)
78
78
 
79
- ・印刷ダイアログは別ウィンドウ扱いなので、switch_to.window() で切り替える必要がある。
79
+ ・印刷ダイアログは別ウィンドウ扱いなので、switch_to.window() で指定対象を切り替える必要がある。
80
80
 
81
81
  ・(当然ですが)印刷ダイアログの構築完了前にボタンクリックのJSを実行してしまうとボタンをクリックできないため、一定時間待つ必要がある。
82
82
 

1

修正

2021/04/09 17:06

投稿

退会済みユーザー
test CHANGED
@@ -44,7 +44,7 @@
44
44
 
45
45
  このJavaScriptのうち.click()を除く部分は、下記の手順で取得できます。
46
46
 
47
- Seleniumのdriver.get(url)で適当なページを表示させます。
47
+ selenium driver.get(url) で適当なページを表示させます。
48
48
 
49
49
  ・Ctrl+Pを押して印刷ダイアログを表示させます。
50
50
 
@@ -52,7 +52,9 @@
52
52
 
53
53
  ・「要素の選択」ボタン(下の画像のオレンジ色で囲まれたボタン)をクリックして要素選択モードにしたあと、印刷ダイアログのOKボタンを右クリックします。
54
54
 
55
- ・OKボタンに対応するHTMLソースが選択されるので、れを右クリックしCopy→JSPath を選択します。
55
+ すると、OKボタンに対応するHTMLソースが選択されるので、選択さているソース部分を右クリックしCopy Copy JSPathを選択します。
56
+
57
+ ・クリップボードに、選択した要素のJSPathが格納されます。
56
58
 
57
59
  ![イメージ説明](a89d1ee077a6d026dca637a7536f51e0.png)
58
60