前提
お世話になっております。
以前、こちらの質問にてseleniumを利用してchromeで印刷する方法はご教授頂いたのですが、
その後様々試していく中で印刷ドライバを変更したいと思いましてコードをいじっていましたができません。
###実現したい事
seleniumを利用して、自社のサイトの画面をdocuwarksで抜き出したい。
chromeにて、
0. 印刷プレビュー画面の呼び出し**(解決済み)**
0. 送信先ドロップダウンリスト(画像参照)から、「もっと見る」を選択
0. 送信先選択画面からDocuWorks Printerを選択する。(解決済み)
0. 詳細設定画面を開く**(解決済み)**
0. 最後に印刷倍率を調整**(一部解決済み)**
0. 印刷ボタンを押す。(解決済み)
までを行いたいと考えています。
試したこと
2・5に関してはshadow-root下のselectタグを選択する方法として下記の通りchromeの印刷プレビューのソースのselectタグ部分をJspathで抜き出し、valueを入れてやるという方法をとってみたのですが下記のエラーが起きております。
また、5.倍率変更に関しては、倍率ボタンを押せないために、その後の数値を入れるところまでできていません。
(追記:実験的に力技でsend key で倍率ボタンをクリックした扱い(カスタム状態にする)にして倍率を変更する事はできました。この力技を使わない事が最終目標になります。また、選択すべきJsPathが違っていたので修正します。)
VBA
1Sub chrome印刷() 2 3Dim driver As New Selenium.WebDriver 4Dim skey As New Selenium.Keys 5Dim Shadowprint As String 6 7'もっと見る呼び出し 8Dim seemore As String 9seemore = "document.querySelector(""body > print-preview-app"").shadowRoot.querySelector(""#sidebar"").shadowRoot.querySelector(""#destinationSettings"").shadowRoot.querySelector(""#destinationSelect"").shadowRoot.querySelector(""print-preview-settings-section:nth-child(10) > div > select"").value =""seeMore"";" 10 11'DocuWorksドライバ選択 12Dim docu As String 13docu = "document.querySelector(""body > print-preview-app"").shadowRoot.querySelector(""#sidebar"").shadowRoot.querySelector(""#destinationSettings"").shadowRoot.querySelector(""print-preview-destination-dialog"").shadowRoot.querySelector(""#printList"").shadowRoot.querySelector(""#destination_9 > print-preview-destination-list-item"").click();" 14 15'詳細設定展開 16Dim shousai As String 17shousai = "document.querySelector(""body > print-preview-app"").shadowRoot.querySelector(""#sidebar"").shadowRoot.querySelector(""#container > print-preview-more-settings"").shadowRoot.querySelector (""div"").click();" 18 19'倍率ボタンをカスタムに変更 20Dim bai As String 21bai = "document.querySelector(""body > print-preview-app"").shadowRoot.querySelector(""#sidebar"").shadowRoot.querySelector(""#moreSettings > print-preview-scaling-settings"").shadowRoot.querySelector(""print-preview-settings-section > div > select"").Value = ""3"";" 22 23'倍率を90に変更 24Dim par As String 25par = "document.querySelector(""body > print-preview-app"").shadowRoot.querySelector(""#sidebar"").shadowRoot.querySelector(""#moreSettings > print-preview-scaling-settings"").shadowRoot.querySelector(""iron-collapse > print-preview-number-settings-section"").shadowRoot.querySelector(""#userValue"").shadowRoot.querySelector(""#input"").value =""90"";" 26 27'印刷 28Dim s_print As String 29s_print = "document.querySelector(""body > print-preview-app"").shadowRoot.querySelector(""#sidebar"").shadowRoot.querySelector(""print-preview-button-strip"").shadowRoot.querySelector(""div > cr-button.action-button"").click();" 30 31'-------------------------------------------------------------------------------------------------------------------------------------- 32driver.Start "chrome" 33driver.Get "https://www.google.com/" 34 35 '印刷画面呼び出し 36 driver.ExecuteScript "setTimeout(function(){window.print();}, 0);" 37 38 'VBAの場合十分な時間待たないと失敗する。 39 driver.Wait (3000) 40 driver.SwitchToNextWindow 41 42 '送信先選択でもっと見るを選択 43 driver.ExecuteScript seemore 44 45 46 driver.Wait (3000) 47 48 '印刷ドライバ選択 49 driver.ExecuteScript docu 50 51 '倍率変更のために詳細設定をクリックし開く 52 driver.ExecuteScript shousai 53 54 '倍率をカスタムに変更 55 driver.ExecuteScript bai 56 57 '倍率を入力 58 driver.ExecuteScript par 59 driver.Wait (3000) 60 '印刷ボタンを押す 61 driver.ExecuteScript s_print 62 63 'VBAの場合Closeで勝手に閉じるので十分な時間WAIT。 64 driver.Wait (20000) 65 66 67 68 69End Sub 70
発生している問題・エラーメッセージ
### 疑問点
value of nullということはなにかかが認識されてはいないとは思うんですが、よくわかりません。
また、手法を変えて、valueでの変更ではなく、option[hoge].selected ="true";での記述も試みましたが結果としてはやはりnull扱いとなりました。
追記:value of null ということは、seemoreの参照を見つけていないということなのか?
また、様々サイトを見たのですが、shadowroot下でのselectタグの扱いに関するものがどうもうまく出てこないので、そもそもこれであっているのかもよくわからない状況です。
追記 試したこと
別の適当なサイトにてshadowDOM下以外でのselect要素の取得を試しに行ってみたところ同じく下記エラーが発生しました。
つまり、shadow-root下の条件ではなく、select要素の取得方法が間違っている可能性が高いようです。
過去の投稿からshadowDOM下の要素の取得と実行に関しては、selenium上ではjavascriptの実行(ExecuteScript hoge )でないと成立しないようなので、
私の必要な情報はseleniumでのselect要素の取得とjavascriptの実行だということだと考えられます。
**
ご教授のほどよろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/08/18 02:41
退会済みユーザー
2021/08/18 02:53 編集
2021/08/18 02:48