Ruby
 Computer >> コンピューター >  >> プログラミング >> Ruby

Watirを使用してRubyからWebブラウザを制御する方法

RubyでWebブラウザを制御できることをご存知ですか?

Watirの宝石を使用すると、これを行うことができます。

最新のブラウザのフルパワーが付属しています

  • ページの表示領域のスクリーンショットを撮ることができます
  • 開発者ツールを手動で開いてコードを入力しなくても、任意のページでJavaScriptを実行できます
  • リンクを見つけてクリックし、入力フィールドにテキストを入力することもできます

Watir&Seleniumプロジェクトのおかげで、これらすべてを利用できます。

いくつかのコード例を見てみましょう!

ブラウザの起動

まず、次のようなブラウザオブジェクトを作成します。

require 'watir'

browser = Watir::Browser.new

これにより、今すぐ制御できる空のChromeウィンドウが開きます(インストールされている場合)。

browser.goto("rubyguides.com")

ChromeはこのURLに移動し、自分でURLを入力したかのようにページが読み込まれます。

マウスとキーボードを使用して、Webサイトで通常行うことは何でもできます。

リンクを見つけてクリックするようなものです。

browser.link(text: "All Posts").click

Watirで要素を見つける方法

次のような属性で要素を見つけることができます:

  • テキスト
  • クラス
  • id

これらの要素にはHTML名と一致するメソッドがあるため、H1タグを探している場合、メソッドはh1です。 、段落の場合、メソッドはpです。 &画像の場合、メソッドはimgのいずれかです。 またはimages

browser.h1(text: "Ruby Post Index")

メソッド名の複数形を使用して要素のリストを取得することもできます。

browser.links
browser.images
browser.h2s

これにより、Watir::AnchorCollectionが提供されます オブジェクトは、それぞれのようなメソッドに応答し、マップして挿入します。

browser.links.map(&:href)

存在しないタイムアウトと要素に対処する方法

要素がまだページに読み込まれていないか、ページが変更されている可能性があるため、要素が存在しない可能性があります。

Watirが要素を見つけられない場合はどうなりますか ?

タイムアウトがあります。

デフォルトでは30秒ですが、変更できます:

Watir.default_timeout = 10

有効期限が切れると、Watir::Exception::UnknownObjectExceptionが発生します 例外。

しかし、これを処理する別の方法があります!

要素をクリックしたり、他のアクションを実行したりする前に、要素が存在するかどうかを確認できます。

方法は次のとおりです

link = browser.link(text: 'Guides')

if link.present?
  link.click
end

スクレンショットの撮り方

ブラウザを開いてページを読み込んだら、そのスクリーンショットを撮ることができます。

このように

browser.screenshot.save("/tmp/screen.png")

これにより、現在のビューポートの画像が保存されます。

スクリプトの実行

ブラウザでJavascriptを実行してページの現在の状態に影響を与えるか、そのページで定義されているJavascript関数を呼び出すことができます。

方法は次のとおりです

browser.execute_script "alert('bacon')"
# nil

結果は?

「ベーコン」という言葉が表示されたアラートウィンドウ🙂

コードを実行して結果を取り戻す

browser.execute_script "return 1 + 1"
# 2

入力フィールドへの入力方法

入力フィールドへの入力には、次の2つの手順が含まれます。

  1. 要素を見つける
  2. キーを送信

ここに例があります

browser.input(id: "search").send_keys("orange juice")

次に、送信ボタンを見つけてクリックする必要があります。

役立つWatirの方法とヒント

Watirを使用すると、いくつかの便利な方法にアクセスできます。

たとえば、現在のURLを取得します

browser.url

開いているタブのリストを取得する

browser.windows

現在のウィンドウを最大化する

browser.window.maximize

現在のページのHTMLとテキストを取得する

browser.text
browser.html

また、部分的に一致する要素を検索する場合のヒントは、正規表現を使用できます。

このように

browser.p(text: /ruby/)

概要

このチュートリアルでは、Watirについて学習しました。これは、Webブラウザーをリモート制御して、タスクを自動化し、ページから情報を抽出できるRubygemです。

より多くの人が見つけられるように、役立つと思われる場合は、この記事を共有してください。

読んでくれてありがとう。


  1. Raspberry Pi で 3D プリンターを制御する方法

    初心者にとって、3D プリントは困難な趣味のように思えるかもしれません。ただし、すべてがどのように機能するかを理解すると、3D プリントは楽しく楽しいものになります。初心者の場合、Windows 10 で使用するプラグアンドプレイ 3D プリンターを購入したくなるかもしれません。いくつかの例には、Monoprice Select Mini Pro (250 ドル) や Snapmaker 3-in-1 3D プリンター (800 ドル) が含まれます。 3D プリントに加えて、レーザー彫刻と CNC フライス加工機能を提供します。どちらのプリンターもエントリー レベルの選択肢として適しています

  2. Web ブラウザから自動再生 GIF を無効にする方法

    アニメーション GIF は、静止画像に命を吹き込む最良の方法です。さまざまな画像形式 (JPEG、PNG) と比較して、メッセージや情報を簡単かつ適切に伝えることができます。それらは興味深く、面白く、自明であり、一度に無意味になる可能性があります.それらの最良の部分は、それらがどのように伝達され、使用されるかです。しかし、それらは時々混乱を招き、本当に迷惑になることがあります。個人的には、これらのアニメーションが許可なく自動再生されるのが好きではありません。また、帯域幅の負荷を消費し、ページの読み込みが遅くなります。しかし、幸いなことに、これらの自動再生 GIF は Web ブラウザーから停止