PlayWrightをPythonで利用してみまして、今回使ってみた「値の取り方」や「値の設定の仕方」を今後のサンプルになるかも?と思ったので、載せておきます。
PlayWrightでは、↓の前の記事でも書いた通り、Codegenを使ってブラウザ操作をコード化できるのですが、そのまま動かないことも多いのです。
そのため、結局、自分でロケーターで指定しなければならないわけです。まぁ、Seleniumもそうでしたしねw
ロケーターの基本的な使い方は、↓のページなど参考にしました。
ただのメモなので、ちょっと雑な書き方になっているのはごめんなさいm(__)m
インラインフレーム(iframe)の取得
インラインフレーム「<iframe id="main_content" scrolling="yes"></iframe>」を取得するやり方
main_frame = page.wait_for_selector("#main_content").content_frame()
インラインフレーム取得後は、Pageオブジェクトと同じように「fill」や「click」などで要素取得ができるようです。
↓FrameクラスのAPIドキュメント
値の取得
テキストフィールド「<input id="in_d_kaishitime_1" ~ >」で入力されている値の取得
input_value_starttime = main_frame.inner_text("#in_d_kaishitime_1")
# または以下のやり方でも取得できる。
input_value_starttime = main_frame.query_selector("#in_d_kaishitime_1").input_value()
プルダウン「<select id="in_kyukakbn" ~ >」で選択されている値の取得
input_value_kyukakbn = main_frame.query_selector("#in_kyukakbn").input_value()
その他表示値、例えば「<span id="disp_sta_intime" ~ >」なども以下で取得できます。
disp_sta_intime = main_frame.inner_text("#disp_sta_intime")
値の設定
HTMLのinputタグ(テキストフィールド)に値を設定
page.fill("input[name=\"auth_user_id\"]", userId)
page.fill("input[name=\"auth_user_password\"]", userPw)
# userID, userPWは文字列です。
main_frame.fill("#in_d_kaishitime_1", "文字列"))
プルダウン「<select id="in_kyukakbn" ~ >」で値を設定
main_frame.select_option("#in_kyukakbn", "40")
クリック
ログインボタンクリック
page.click("input:has-text(\"ログイン\")")
main_frame.click("button:has-text(\"送 信\")")
リンクのクリック
main_frame.click("a:has-text(\"文字列\")")
ダイアログボタンの存在確認してボタンクリック
if(page.query_selector("#Modal1_ok_btn") != None and page.query_selector("#Modal1_ok_btn").is_visible()):
page.click("#Modal1_ok_btn")
最後に
ここで書いた以上にもさまざまな要素の取り方があるので、もし、上手くいかなかった場合には、他のやり方をいろいろと試してみるとよいでしょう。
私のやり方としては、「Visual Studio Code」で開発しているのですが、デバックモードで実行して、対象の要素が表示される状態のときにブレイクポイントを貼っておいて、止め、そのときに「ウィッチリストでいろんなやり方を試してみて、値を取れるかを評価してみる」という方法で開発を進めていました。
良かったら参考にしてください。