リンクを別タブを開いてアクセスすればPageBackとか要らない
Pythonで同じような記事がありました
あずみ.net様はPythonでのSelenium記事が多数あるので、Pythonの方はオススメです。
【Python】Seleniumで別タブにページを 表示させる方法 | あずみ.net
katsulogではRubyとJavaScriptで実装してみます
あずみ.net様ではショートカットキーを利用して実装されていましたが、
当ブログではJavaScriptで新しいタブを開いてリンクを開いてみます。
もちろんrubyでもショートカットで開くという方法もありますが、敢えて別の方法でやってみましょう。
実装
では、ポイントを分けて説明していきます。
リンクを取得
要素からリンク先のURLを取得します。
1 2 3 4 5 |
require 'selenium-webdriver' driver = Selenium::WebDriver.for :chrome link = driver.find_element(:id, 'リンクがある要素').find_element(:tag_name, 'a').attribure("href") |
上記ではリンクがある要素の配下にaタグがあって、hrefでリンク先が指定されている場合の実装です。
WEBページではだいたいこんな感じで取れると思います。
attributeはあまり見かけないかもしれませんが、要素の属性を取れます。
hrefやaltやsrcなどの属性ですね。
新しいタブを開く
JavaScriptを呼び出して新しいブランクのタブを開きます。
1 |
driver.execute_script( 'window.open()' ) |
execute_scriptはJavaScriptを実行できるやーつです。
新しいタブに移動してリンクを開く
先ほど開いたタブに移動します。
1 2 |
driver.switch_to.window( driver.window_handles.last ) driver.get(link) |
window_handlesは開いているウインドウを配列で取得するので、lastとすれば最後のタブを指定することになります。
新しいタブに移動して先ほど取得したリンクを開くことができました。
まとめ
ではコードをまとめてみます。
1 2 3 4 5 6 7 8 9 10 11 |
require 'selenium-webdriver' driver = Selenium::WebDriver.for :chrome link = driver.find_element(:id, 'リンクがある要素').find_element(:tag_name, 'a').attribure("href") driver.execute_script( 'window.open()' ) driver.switch_to.window( driver.window_handles.last ) driver.get(link) |
簡単ですね。
この方法を使うとリンクにアクセスした後にページバックをしてまた要素を取り直して次の動作を行うという必要がなくります。
ちなみにページバックは
1 |
driver.navigate.back |
でできます。
というわけで新規タブの開き方とウインドウの移動のご紹介でした。
あずみ.net様からネタをいただいてRubyで実装するというのを続けてみようかと思っています。(ダメだったらコメントお願いしますmm)