質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

Q&A

解決済

1回答

1950閲覧

SeleniumBasic_スクレイピング_カレンダーとセレクトボックスの要素選択

nonsan

総合スコア3

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

0グッド

1クリップ

投稿2022/11/02 06:52

前提

VBAとteratail初心者です。HTML,CSS,Javascript,PHPは簡単なWebサイトを作成出来る程度の理解です。

VBAでseleniumを使用して(SeleniumBasicをインストール)スクレイピング機能を作成しています。
ブラウザを立ち上げ、クリックから子画面を表示するところまでは作成出来たのですが、
子画面にある手入力可能なカレンダーのテキスト入力部分に値を設定することが出来ません。
また、同子画面のセレクトボックスの選択が出来なくて困っています。
要素にid,nameが無いためclassを使用したところclass名がNot Foundでエラーが出ています。
XPathで指定しても同じような状況です。HTMLが私の理解が及ばないコーディングのため、
指定してる要素が合っているかも少々怪しいです。
セレクトボックスの部分は開発ツールで青くなる実際の場所と別にoptionが存在するようで
Ulで作成されているようです。⇦申し訳ありません。このあたりの理解も足りていません。

実現したいこと

・手入力可能なカレンダーのテキストエリアに値を設定。
・セレクトボックスの選択。

発生している問題・エラーメッセージ

NoSuchElementError Element not found for Class =…

該当のソースコード

※IDとパスワードによるログインが必要な画面のため該当すると思われるコードのみ記載します。

カレンダーのテキストエリア <div class="ant-form-item-control"> <span class="ant-form-item-children"> <span data-v-7e954258="" class=""> <span class="ant-calendar-picker ant-calendar-picker-small"> <div class=""> <input readonly="true" placeholder="" class="ant-calendar-picker-input ant-input ant-input-sm"> <i aria-label="icon: calendar" class="anticon anticon-calendar ant-calendar-picker-icon"> <svg viewBox="64 64 896 896" data-icon="calendar" width="1em" height="1em" fill="currentColor" aria-hidden="true" focusable="false" class=""> … セレクトボックス <span class="ant-form-item-children"> <span data-v-7e954258="" class=""> <div tabindex="0" class="select ant-select ant-select-enabled ant-select-allow-clear ant-select-sm" style="width: 200px;"> <div role="combobox" aria-autocomplete="list" aria-haspopup="true" aria-controls="e1134ff0-a717-4127-a5d4-a3306abedcc7" class="ant-select-selection ant-select-selection--single"> <div class="ant-select-selection__rendered"> <div title="4年間" class="ant-select-selection-selected-value" style="display: block; opacity: 1;">4年間</div> </div> … 上記セレクトのOption部分 セレクトボックスのコードと別の場所に記載有 <ul role="listbox" tabindex="0" class="ant-select-dropdown-menu ant-select-dropdown-menu-vertical ant-select-dropdown-menu-root"><li role="option" class="ant-select-dropdown-menu-item" unselectable="on" style="user-select: none;"> 1年間 </li><li role="option" class="ant-select-dropdown-menu-item" unselectable="on" style="user-select: none;"> 2年間 </li><li role="option" class="ant-select-dropdown-menu-item" unselectable="on" style="user-select: none;"> 3年間 </li><li role="option" class="ant-select-dropdown-menu-item ant-select-dropdown-menu-item-selected" unselectable="on" style="user-select: none;" aria-selected="true"> 4年間 </li><li role="option" class="ant-select-dropdown-menu-item" unselectable="on" style="user-select: none;"> 5年間 </li> </ul>

試したこと

カレンダーのテキストエリア選択は
Driver.FindElementByCss("i.anticon.anticon-calendar.ant-calendar-picker-icon").Click
で動作しました。テキストエリアにフォーカスが移動し、カレンダーが展開されます。
選択は可能ですが、値を設定する方法が理解出来ませんでした。

セレクトボックスに至ってはelement not foundになるためどの要素を選択するのが正しいのか。から
理解出来ていません。

初めての投稿のため必要な内容が不足していたら申し訳ございません。
ご教授いただけると幸いです。

補足情報(FW/ツールのバージョンなど)

使用ブラウザchrome

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bebebe_

2022/11/02 07:36

セレクトボックスが見つからないのは別のフレームの可能性はないですか?
nonsan

2022/11/03 23:42

コメントありがとうございます。iframeは見当たりませんでした。 セレクト部分は質問から少し進展があり、現在KeyboardEventを使用し、KeyDown→Enterで無理やり選択しています。 Driver.ExecuteScript "var el=document.querySelector("".select.ant-select.ant-select-enabled.ant-select-allow-clear.ant-select-sm"");" & "let KEvent = new KeyboardEvent(""keydown"", { keyCode: 13 });" & "el.dispatchEvent(KEvent);" で直接的に操作し選択をしておりますが、 Driver.ExecuteScript ("var el=document.querySelector("".select.ant-select.ant-select-enabled.ant-select-allow-clear.ant-select-sm"");" & "el.options[0].selected=true;") では選択出来ない認識になりますでしょうか。 ご存じでしたらご教授いただけると幸いです。
guest

回答1

0

自己解決

かなり力技で解決しました。
・手入力可能なカレンダーのテキストエリアに値を設定。
'カレンダー選択
Driver.ExecuteScript "var el=document.querySelector(""i.anticon.anticon-calendar.ant-calendar-picker-icon"");" & "el.click();"
'カレンダー情報入力
Driver.FindElementByClass("ant-calendar-input").SendKeys ("2022/11/17")
'Enter押下で確定※もっと自然に動作させたいが…
Driver.FindElementByClass("ant-calendar-input").SendKeys ks.Enter

・セレクトボックスの選択。
'セレクトボックスクリック
Driver.ExecuteScript "var el=document.querySelector("".select.ant-select.ant-select-enabled.ant-select-allow-clear.ant-select-sm"");" & "el.click();"
'矢印KEYの下でリストから選択
Driver.ExecuteScript "var el=document.querySelector("".select.ant-select.ant-select-enabled.ant-select-allow-clear.ant-select-sm"");" & "let KEvent = new KeyboardEvent(""keydown"", { keyCode: 40 });" & "el.dispatchEvent(KEvent);"
'EnterKeyで確定
Driver.ExecuteScript "var el=document.querySelector("".select.ant-select.ant-select-enabled.ant-select-allow-clear.ant-select-sm"");" & "let KEvent = new KeyboardEvent(""keydown"", { keyCode: 13 });" & "el.dispatchEvent(KEvent);"

理想のコードにたどり着けず時間も無かったためとりあえず無理やり動かしているコードですが、最低限の動作はクリア出来たので一応記録を残しておきます。

投稿2022/11/16 23:50

nonsan

総合スコア3

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問