質問: ### 前提・実現したいこと 毎日行っている、ある企業サイトでのpdfファイル発行作業を自動化したいと思い、 VBAとSeleniumを利用してコードを書いております。 その作業の終盤で印刷ダイアログが表示される前に 印刷プレビューがタブ内にオーバーレイ表示される部分があり、 この画面内にある「印刷」ボタンを押したいのですが、 方法を教えて頂けないでしょうか。 ### 発生している問題・エラーメッセージ オーバーレイされている画面を選択するためにSwitchToFrameを利用しているのですが、 正しいフレーム名が分からず、 この方法で正しいのかも正直自信がありません。 ``` エラーメッセージ ``` 実行時エラー'8' NoSuchFrameError Frame not be found. Identifer:fancybox* ### 該当のソースコード ``` Dim Driver As New Selenium.WebDriver with Driver .Start"chrome" .Get"企業サイトURL" '~印刷ファイル等を設定~ .FindElementByCss("#start_print").Click '←ここで印刷プレビュー画面がオーバーレイされます .SwitchToFrame("fancybox*") '←ここでエラーが出ます .FindElementByCss("#print").Click '←このコマンドがプレビュー画面内で実行出来れば印刷ダイアログが表示されます end with ``` ### 試したこと ChromeのディベロッパーツールのSourcesを確認したところ、 「top」と「top/fancybox-frame数字+文字」というウィンドウマークを発見し、 以下のような名前を試してみました。 "fancybox-frame" "fancybox-frame数字+文字"をそのまま表記 "top/fancybox-frame" また下記の方の情報を参考にさせて頂きました。 https://qiita.com/tsuttie/items/73c134bbc7d9cff320c3 ### 補足情報(FW/ツールのバージョンなど) Excel VBA Google Chrome Seleniumbasic エラーの一つ前のコマンドで指定する"#start_print"の ソースは↓のように書かれてましたが、お役に立ちますでしょうか。 発行開始
回答: Frame not be found. そのような Frameが 見rつからないというメッセージなので Frame が表示されてないか、指定が間違っているのでは.. 前者は下のように delayを挟んでみてはいかがでしょうか ``` .FindElementByCss("#start_print").Click '←ここで印刷プレビュー画面がオーバーレイされます Application.Wait Now() + TimeValue("00:00:05") ' 5秒待機する (ほかに表示されるまで待つ等) .SwitchToFrame("fancybox*") '←ここでエラーが出ます ```