ja ja ja ja ja ja ja ja ja en ja ja ja ja ja ja ja ja ja ja ja de ja ja ja ja ja ja en ja ja ja en ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja en ja ja ja en ja ja en ja ja vi ja sv eu ja en en hu ja ja en en pl ja ja jbo hbs_lat en ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja
WebDriver APIを使ったLua用のWebブラウザー自動操作ライブラリー LuaWebDriver - 2018-11-06 - ククログ
LuaWebDriverを使ってFirefoxを操作するには、web-driver.Firefoxクラスのオブジェクトが必要です。 web-driver.Firefoxクラスのオブジェクトは以下のように作成します。
local Firefox = require("web-driver/firefox") local firefox = Firefox.new()
web-driver.Firefoxクラスのオブジェクト作成時には、様々なオプションが設定できますが、ここでは、わかりやすさのため、オプションは設定せず、全てデフォルト値で実行します。 設定可能なオプションについては、web-driver.Firefoxクラスのリファレンスを参照してください。
web-driver.Firefoxクラスのオブジェクトを作成しました。次は、作成したオブジェクトを使って、Firefoxを起動し、操作します。 Firefoxの起動と操作は、web-driver.Firefox:start_session()を使って行います。
web-driver.Firefox:start_session()は引数にコールバック関数を指定でき、LuaWebDriverは、Firefox起動後、引数に指定されたコールバック関数を実行します。このweb-driver.Firefox:start_session()の引数に与えるコールバック関数内にFirefoxを操作して実行したい処理を実装します。
例えば、指定したURLのWebサイトへアクセスする場合は以下のように実装します。
local Firefox = require("web-driver/firefox") local firefox = Firefox.new() local URL = "https://clear-code.gitlab.io/lua-web-driver/sample/" -- コールバックの作成とセッションの開始 firefox:start_session(function(session) -- 指定したURLのWebサイトへアクセス session:navigate_to(URL) end)
コールバック関数の引数には、起動したFirefoxとのセッションがweb-driver.Sessionクラスのオブジェクトとして渡されます。 このオブジェクトを使って、ブラウザーの操作を実装します。 Webサイトへのアクセスは、web-driver.Session:navigate_to()を使って行います。このメソッドの引数にアクセスしたいWebサイトのURLを指定すると、そのURLへアクセスできます。
Webサイトへのアクセス以外の操作については、web-driver.Sessionクラスのリファレンスに記載がありますので、合わせて参照してください。
LuaWebDriverの主な機能を紹介します。 LuaWebDriverを使うとLuaで以下のようなことができます。
Webサイトへのログイン、ページ内のリンククリック
ここでは、ログインが必要なWebサイトへアクセスし、ログインを実施、ログイン後のページ内のリンクをクリックしてWebページを移動、移動後のページの要素のテキストを取得する例を示します。 少し複雑な例ですが、Webサイトの操作によく使う機能を紹介できるので、このような例にしました。
ログインの実行やリンククリックを行うには、特定のフォームへのテキスト入力、ボタン操作、リンクのクリック操作が必要です。 LuaWebDriverでは、これらを、web-driver.Session:css_selectとweb-driver.ElementSet:send_keys()、web-driver.ElementSet:click()、web-driver.Session:link_search()というメソッドで実現します。
具体的な使い方は、以下の実装例を使って説明します。
local Firefox = require("web-driver/firefox") local firefox = Firefox.new() local URL = "https://clear-code.gitlab.io/lua-web-driver/sample/move.html" -- コールバックの作成とセッションの開始 firefox:start_session(function(session) -- ログインが必要なページへアクセス session:navigate_to(URL) -- Webサイト内のフォームを取得 local form = session:css_select('form') -- ユーザー名を入力するためのフォームを取得 local text_form = form:css_select('input[name=username]') -- フォームにユーザー名を入力 text_form:send_keys("username") -- パスワードを入力するためのフォームを取得 local password_form = form:css_select('input[name=password]') -- フォームにパスワードを入力 password_form:send_keys("password") -- ユーザー名とパスワードを送信するためのボタンを取得 local button = form:css_select("input[type=submit]") -- ユーザー名とパスワードを送信 button:click() -- リンク操作をするための要素オブジェクトを取得 local link = session:link_search("1") -- リンクをクリック link:click() local elements = session:css_select("p") -- 取得した要素のテキストを取得 print(elements:text()) -- 1 end)
まずは、web-driver.Session:css_select()を使って、ユーザー名を入力するフォームを取得します。 web-driver.Session:css_select()は、CSSセレクターを用いて取得したい要素を指定できます。上記例では、input[name=username]としているので、name属性がusernameとなっているinput要素を取得します。
取得した結果は、web-driver:ElementSetクラスのオブジェクトとして返ってきます。 返ってきたオブジェクトを使って、web-driver:ElementSet:send_keys()を実行します。このメソッドは、取得した要素に対して指定したテキストを入力します。上記例では、取得したinput要素にusernameという文字列を入力しています。 これで、ユーザー名の入力は完了です。
次にパスワードの入力を実施します。パスワードの入力もユーザー名の入力と同様web-driver.Session:css_select()を使ってinput要素を取得し、取得したinput要素に対して、web-driver.ElementSet:send_keys()を使ってパスワードを入力します。
ユーザー名とパスワードの入力が完了したら、次は、ユーザー名とパスワードを送信するために送信ボタンを押下します。 送信ボタンの押下は、web-driver.Session:css_select()を使って、送信ボタンを取得します。ボタンの押下は、web-driver.ElementSet:click()を使います。
ここまでで、ユーザー名とパスワードを入力し、それらを送信しました。 入力したユーザー名とパスワードに間違いがなければ、ログイン成功し、ログイン後のページヘ遷移します。
リンク先のページへ遷移
次は、ログイン後のページ内のリンクをクリックし、別のページへ遷移します。 ページ内のリンクを取得するには、web-driver.Session:link_search()を使います。このメソッドの引数にa要素のname属性の値を指定します。 上記の例では、リンクテキストが「1」のリンクを取得しています。取得したリンクをクリックするには、web-driver.ElementSet:click()を使います。 これで、リンク先のページへ遷移します。
ページ内のテキストを取得
リンク先のページへ遷移後は、ページ内要素を取得し、その要素のテキストを取得します。 要素の取得は、今までと同様、web-driver.ElementSet:css_select()で取得します。 取得した要素のテキストを取得するには、web-driver.ElementSet:text()を使用します。web-driver.ElementSet:text()は要素のテキストを文字列として返します。 上記の例では、遷移後のページのp要素のテキストを取得し、printを使ってテキストを標準出力に出力しています。
このようにして、LuaWebDriverでは、Webブラウザーを操作し、必要なページや要素へアクセスしその値を取得することができます。 今回の例では、要素の取得にCSSセレクターを使いましたが、XPathなどその他の方法で検索、取得することもできます。 CSSセレクター以外の取得方法については、web-driver.Searchableモジュールのリファレンスに記載しています。
LuaWebDriverの基本的な使い方と主な機能を紹介しました。ここで紹介した機能以外にも便利な機能があります。 LuaWebDriverのその他の機能については、以下のドキュメントを参照して下さい。
チュートリアル リファレンス
このライブラリーは、XMLua、LuaCSと同様株式会社セナネットワークス様からの依頼を受けて開発した受託開発の成果物です。
成果物をフリーソフトウェアとして公開すると、様々なユーザーがライブラリーを使うことによって、いままで気が付かなかったバグを発見できたり、ユーザーからの要望によって、当初想定していなかった、便利な新機能を実装するきっかけとなったり、様々なメリットがあます。
このように成果物の公開によって、ライブラリーの品質も高まるので、お客さんにとっても成果物を公開するメリットがあります。
ご依頼主の株式会社セナネットワークス様には、上記のようなメリットにご理解をいただき、成果を公開できました。ありがとうございます!
現在クリアコードではソフトウェア開発者を募集しています! フリーソフトウェア開発での開発の仕方をベースに、成果や知識を公開し共有しながら業務に携われます。
Tokyo WebExtensions Meetup #3
YoctoでFcitxをビルドする
Apache Arrow
milter manager
ククログの記事はCC BY-SA 4.0とGFDLのデュアルライセンスで自由に利用できます。
クリアコードはプログラミングが楽しいソフトウェア開発者を1名募集しています。
クリアコードは「クリアコードをいい感じにする人」を1名募集しています。
クリアコードはフリーソフトウェア開発で培った技術力を提供しています。特にMozilla製品(Mozilla FirefoxとMozilla Thunderbird)とRubyとGroonga(全文検索)に関連した開発を得意としています。