QR Send

スマホとPCのChrome間で、URLやテキストをQRコード1回のペアリングで送り合える自作Chrome拡張。アカウント不要・無料。

使ってみる →

リンクを別タブを開いてアクセスすればPageBackとか要らない

Selenium・自動化

Pythonで同じような記事がありました

あずみ.net様はPythonでのSelenium記事が多数あるので、Pythonの方はオススメです。

【Python】Seleniumで別タブにページを 表示させる方法 | あずみ.net

 

 

katsulogではRubyとJavaScriptで実装してみます

あずみ.net様ではショートカットキーを利用して実装されていましたが、
当ブログではJavaScriptで新しいタブを開いてリンクを開いてみます。
もちろんrubyでもショートカットで開くという方法もありますが、敢えて別の方法でやってみましょう。

 

実装

では、ポイントを分けて説明していきます。

 

リンクを取得

要素からリンク先のURLを取得します。

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を呼び出して新しいブランクのタブを開きます。

driver.execute_script( 'window.open()' )

execute_scriptはJavaScriptを実行できるやーつです。

 

新しいタブに移動してリンクを開く

先ほど開いたタブに移動します。

driver.switch_to.window( driver.window_handles.last )
driver.get(link)

window_handlesは開いているウインドウを配列で取得するので、lastとすれば最後のタブを指定することになります。

新しいタブに移動して先ほど取得したリンクを開くことができました。

 

まとめ

ではコードをまとめてみます。

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)

簡単ですね。

この方法を使うとリンクにアクセスした後にページバックをしてまた要素を取り直して次の動作を行うという必要がなくります。
ちなみにページバックは

driver.navigate.back

でできます。

 

というわけで新規タブの開き方とウインドウの移動のご紹介でした。
あずみ.net様からネタをいただいてRubyで実装するというのを続けてみようかと思っています。(ダメだったらコメントお願いしますmm)

コメント

タイトルとURLをコピーしました