回答編集履歴
4
VBAのコードを追記
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
|
-
・印刷ダイアログは別ウィンドウ扱いなので、
|
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
修正
test
CHANGED
@@ -116,13 +116,13 @@
|
|
116
116
|
|
117
117
|
|
118
118
|
|
119
|
-
'''印刷
|
119
|
+
'''印刷ダイアログの構築完了前に要素を選択してしまう場合があるため、
|
120
120
|
|
121
|
-
|
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
修正
test
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
|
5
|
+
selenium上で印刷ダイアログを表示させた場合は、下の画像のように、印刷元のページに#shadow-rootというIDが特別に差し込まれた形になります。
|
6
6
|
|
7
7
|
![イメージ説明](d802f362938a310c764c2eae530f83b2.png)
|
8
8
|
|
@@ -74,9 +74,9 @@
|
|
74
74
|
|
75
75
|
キモとなる点というか、たどり着くのに苦労した点は
|
76
76
|
|
77
|
-
・印刷
|
77
|
+
・印刷ボタンをクリックさせるには、setTimeOut関数を使ってwindow.print()を呼び出さないといけない(理由不明)
|
78
78
|
|
79
|
-
・印刷ダイアログは別ウィンドウ扱いなので、switch_to.window() で切り替える必要がある。
|
79
|
+
・印刷ダイアログは別ウィンドウ扱いなので、switch_to.window() で指定対象を切り替える必要がある。
|
80
80
|
|
81
81
|
・(当然ですが)印刷ダイアログの構築完了前にボタンクリックのJSを実行してしまうとボタンをクリックできないため、一定時間待つ必要がある。
|
82
82
|
|
1
修正
test
CHANGED
@@ -44,7 +44,7 @@
|
|
44
44
|
|
45
45
|
このJavaScriptのうち.click()を除く部分は、下記の手順で取得できます。
|
46
46
|
|
47
|
-
・
|
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ソースが選択されるので、
|
55
|
+
・すると、OKボタンに対応するHTMLソースが選択されるので、選択されているソース部分を右クリックし「Copy → Copy JSPath」を選択します。
|
56
|
+
|
57
|
+
・クリップボードに、選択した要素のJSPathが格納されます。
|
56
58
|
|
57
59
|
![イメージ説明](a89d1ee077a6d026dca637a7536f51e0.png)
|
58
60
|
|