Ruby CleanでChromeから高レベルのAPIです。デフォルトではヘッドレスを実行しますが、ヘッドフルモードで実行するように構成できます。必要なのは、RubyとChromeまたはChromiumだけです。 FerrumはCDPプロトコルによってブラウザに接続し、Selenium/WebDriver/Chromedriverの依存関係はありません。 Chromeは、他のブラウザと一貫したデザインを持つ必要があるため、WebDriverによってほとんどサポートされていない非常に多くのことを行うことができるため、生のCDPプロトコルに重点が置かれました。
Cupriteは、Ferrumに基づいたCapybaraの純粋なRubyドライバーです。あなたがクロールサイトを登るつもりなら、あなたはテストではなくクロールするので、フェラムまたは容器をよりよく使用します。
フェラムと機械化に基づいた容器高レベルのWebクロールフレームワーク。
Linux用の公式のChromeまたはChromiumパッケージはありません。これは、時代遅れでも非公式でもないため、このようにインストールしません。 ChromeまたはChromiumの公式ソースからダウンロードしてください。 ChromeバイナリはPATHまたはBROWSER_PATHにある必要があり、 :browser_pathインスタンスのオプションとして渡すことができます。
これをGemfileに追加し、 bundle installます。
gem "ferrum" Webサイトに移動してスクリーンショットを保存します。
browser = Ferrum :: Browser . new
browser . go_to ( "https://google.com" )
browser . screenshot ( path : "google.png" )
browser . quit Browserインスタンスで作業すると、Ferrumがデフォルトページを作成および維持すると、実際には、上記のすべてのメソッドがbrowserインスタンスのdefault_contextで作成されたpageインスタンスに送信されます。手動で作成されたページと対話できますが、これは推奨されます。
browser = Ferrum :: Browser . new
page = browser . create_page
page . go_to ( "https://google.com" )
input = page . at_xpath ( "//input[@name='q']" )
input . focus . type ( "Ruby headless driver for Chrome" , :Enter )
page . at_css ( "a > h3" ) . text # => "rubycdp/ferrum: Ruby Chrome/Chromium driver - GitHub"
browser . quitいくつかのJavaScriptを評価し、全幅/高さを取得します:
browser = Ferrum :: Browser . new
page = browser . create_page
page . go_to ( "https://www.google.com/search?q=Ruby+headless+driver+for+Capybara" )
width , height = page . evaluate <<~JS
[document.documentElement.offsetWidth,
document.documentElement.offsetHeight]
JS
# => [1024, 1931]
browser . quit好きなマウスの動きをします:
# Trace a 100x100 square
browser = Ferrum :: Browser . new
page = browser . create_page
page . go_to ( "https://google.com" )
page . mouse
. move ( x : 0 , y : 0 )
. down
. move ( x : 0 , y : 100 )
. move ( x : 100 , y : 100 )
. move ( x : 100 , y : 0 )
. move ( x : 0 , y : 0 )
. up
browser . quit dockerとしてルートとして、sandboxノーブラウザオプションを渡す必要があります。
Ferrum :: Browser . new ( browser_options : { 'no-sandbox' : nil } )また、M1 MACのDockerコンテナ内で実行すると、Ferrumの動作を防ぐと、Chromeプロセスが繰り返しクラッシュすることが報告されています。フェルムは、非M1 MacのDockerコンテナに展開されたときに予想どおりに機能するはずです。
テストセットアップで次のコードを使用してオプションをカスタマイズできます。
Ferrum :: Browser . new ( options )Hash:headless (string | boolean) - デフォルトでは、ブラウザをヘッドレスまたはtrueとして設定します。 "new"を設定して、新しいヘッドレスモードをサポートできます。:xvfb (boolean) - デフォルトでは、仮想フレームバッファーでfalseを実行します。:flatten (boolean) - ブラウザーに1つのWebSocket接続を使用し、Flattenモードのすべてのページを使用します。:window_size (array) - テストするためのブラウザウィンドウの寸法。たとえば[1024、768]。デフォルト:[1024、768]:extensions (array [string | hash]) - ブラウザにプリロードするファイルまたはJSソースコードへのパスの配列EG ["/path/to/script.js", { source: "window.secret = 'top'" }]:logger ( putsに応答するオブジェクト) - 存在すると、デバッグ出力がこのオブジェクトに書き込まれます。:slowmo (integer | float) - コマンドを送信する前に待機するために数秒で遅延を設定します。ヘッドレスオプションの便利なコンパニオンで、変更を確認する時間があります。:timeout (numeric) - ブラウザと通信するときに応答を待つ秒数秒数。デフォルトは5です。:js_errors (boolean) - trueの場合、JavaScriptエラーがRubyで再作成されます。:pending_connection_errors (boolean) - メインフレームがまだ遅い応答を待っているとき、タイムアウトに達している間に到達している間、保留PendingConnectionsErrorが発生します。この設定をオフにするのではなく、応答が遅い理由を把握し、修正またはブロックする方が良いでしょう。デフォルトはtrueです。:browser_name (シンボル) - :chrome 、実験的サポートのみ:firefoxのみ。:browser_path (string) - クロムバイナリへのパス、env変数をBROWSER_PATH=some/path/chrome bundle exec rspecとして設定することもできます。:browser_options (hash) - 追加のコマンドラインオプション、それらをすべて参照してください{ "ignore-certificate-errors" => nil }:ignore_default_browser_options (boolean) - ferrumには、ブラウザに渡される多くのデフォルトオプションがあります。これをtrueに設定すると、 :browser_optionsもちろん必要なものを除いてブラウザに渡されます。:port (整数) - ヘッドレスクロム用のリモートデバッグポート。:host (string) - ヘッドレスクロムのリモートデバッグアドレス。:url (string) - chromeの実行インスタンスのURL。これが設定されている場合、ブラウザプロセスは生成されません。:ws_url (string) - chromeの実行中のインスタンスのWebSocket URL。これが設定されている場合、ブラウザプロセスは生成されません。それは以下よりも優先されます:url 、設定は両方とも意味がありません。:process_timeout (integer) - Chromeプロセスが起動時に応答するのを待つ時間。:ws_max_receive_size (integer) - バイトのWebソケットを介してChromeから受け入れる大きなメッセージ。デフォルトは64MBです。これよりも大きい入っているメッセージはFerrum::DeadBrowserErrorを引き起こします。:proxy (Hash) - プロキシ設定を指定して、続きを読んでください:save_path (string) - 添付ファイルを保存するパスコンテンツ拡散ヘッダー。:env (hash) - プロセスに伝えたい環境変数Stringページをナビゲートします。
Stringドライバーを構成するときにbase_url設定しない限り、URLにスキームを含める必要があります。 page . go_to ( "https://github.com/" ) 歴史の前のページに移動します。
page . go_to ( "https://github.com/" )
page . at_xpath ( "//a" ) . click
page . back 歴史の次のページに移動します。
page . go_to ( "https://github.com/" )
page . at_xpath ( "//a" ) . click
page . back
page . forward 現在のページをリロードします。
page . go_to ( "https://github.com/" )
page . refresh ページ上のすべてのナビゲーションと保留中のリソースのロードを停止します
page . go_to ( "https://github.com/" )
page . stop ブラウザウィンドウの位置を設定します
HashIntegerInteger browser . position = { left : 10 , top : 20 } Array<Integer>ブラウザウィンドウの位置を取得します
browser . position # => [10, 20] ウィンドウの境界を設定します
HashIntegerIntegerIntegerIntegerString browser . window_bounds = { left : 10 , top : 20 , width : 1024 , height : 768 , window_state : "normal" } Hash<String, Integer | String>ウィンドウの境界を取得します
browser . window_bounds # => { "left": 0, "top": 1286, "width": 10, "height": 10, "windowState": "normal" } Integer現在のウィンドウID
browser . window_id # => 1 Node | nilセレクターでノードを見つけます。ドキュメント内または提供されたノード内でdocument.querySelectorを実行します。
StringHashNode内| nil page . go_to ( "https://github.com/" )
page . at_css ( "a[aria-label='Issues you created']" ) # => Node Array<Node> | []セレクターによるノードを見つけます。このメソッドは、ドキュメント内でdocument.querySelectorAllを実行するか、ノードを提供します。
StringHashNode内| nil page . go_to ( "https://github.com/" )
page . css ( "a[aria-label='Issues you created']" ) # => [Node] Node | nilXpathによるノードを見つけます。
StringHashNode内| nil page . go_to ( "https://github.com/" )
page . at_xpath ( "//a[@aria-label='Issues you created']" ) # => Node Array<Node> | []XPathによるノードを見つけます。
StringHashNode内| nil page . go_to ( "https://github.com/" )
page . xpath ( "//a[@aria-label='Issues you created']" ) # => [Node] String現在のトップウィンドウの場所を返します。
page . go_to ( "https://google.com/" )
page . current_url # => "https://www.google.com/" String現在のトップウィンドウタイトルを返します
page . go_to ( "https://google.com/" )
page . current_title # => "Google" String現在のページのHTMLを返します。
page . go_to ( "https://google.com/" )
page . body # => '<html itemscope="" itemtype="http://schema.org/WebPage" lang="ru"><head>... String | Integerディスクにスクリーンショットを保存するか、base64として返します。
HashString 。 :encoding 、次のように設定されます:binarySymbol :base64 | :binaryあなたはそれをbase64として画像を返すように設定できますString "jpeg"( "jpg")| 「PNG」| 「webp」Integer 0-100はJPEGのみで機能しますBooleanString CSSセレクター、オプションHashエリア、オプションIntegerIntegerIntegerIntegerFloatズームイン/アウトFerrum::RGBA.new(0, 0, 0, 0.0)特定の背景色を持つ page . go_to ( "https://google.com/" )
# Save on the disk in PNG
page . screenshot ( path : "google.png" ) # => 134660
# Save on the disk in JPG
page . screenshot ( path : "google.jpg" ) # => 30902
# Save to Base64 the whole page not only viewport and reduce quality
page . screenshot ( full : true , quality : 60 , encoding : :base64 ) # "iVBORw0KGgoAAAANSUhEUgAABAAAAAMACAYAAAC6uhUNAAAAAXNSR0IArs4c6Q...
# Save on the disk with the selected element in PNG
page . screenshot ( path : "google.png" , selector : 'textarea' ) # => 11340
# Save to Base64 with an area of the page in PNG
page . screenshot ( path : "google.png" , area : { x : 0 , y : 0 , width : 400 , height : 300 } ) # => 54239
# Save with specific background color
page . screenshot ( background_color : Ferrum :: RGBA . new ( 0 , 0 , 0 , 0.0 ) ) String | BooleanPDFをディスクに保存するか、base64として返します。
Hash :ディスク上にPDFを保存するパスString 。 :encoding 、次のように設定されます:binary
:エンコードSymbol :base64 | :binary PDFをbase64として返すように設定できます
:ランドスケープBooleanペーパーオリエンテーション。デフォルトはfalseになります。
:スケールFloatズームイン/アウト
:フォーマットsymbol標準用紙サイズ:文字、:リーガル、:タブロイド、:元帳、:a0、:a1、:a2、:a4、:a5、:a6
:Paper_Width Floatセットペーパー幅
:Paper_Height Floatセットペーパーの高さ
渡すことができる他のネイティブオプションをご覧ください
page . go_to ( "https://google.com/" )
# Save to disk as a PDF
page . pdf ( path : "google.pdf" , paper_width : 1.0 , paper_height : 1.0 ) # => true String | IntegerMHTMLをディスクに保存するか、文字列として返します。
HashString 。 page . go_to ( "https://google.com/" )
page . mhtml ( path : "google.mhtml" ) # => 87742 page.network
Array<Network::Exchange>ネットワークトラフィックに関するすべての情報をNetwork::Exchangeインスタンスは、一般的にrequest 、 response 、 errorに関するラッパーです。
page . go_to ( "https://github.com/" )
page . network . traffic # => [#<Ferrum::Network::Exchange, ...] Network::Requestメインフレームのページリクエスト。
page . go_to ( "https://github.com/" )
page . network . request # => #<Ferrum::Network::Request... Network::Responseメインフレームのページ応答。
page . go_to ( "https://github.com/" )
page . network . response # => #<Ferrum::Network::Response... Integerメインページ応答のステータスコードが含まれています(たとえば、成功のために200)。これは、 response.statusの近道です。
page . go_to ( "https://github.com/" )
page . network . status # => 200 Booleanネットワークのアイドルを待つ、成功した場合にtrueを返し、接続がまだある場合はfalse返します。
HashIntegerネットワークがアイドリングするために許可される接続の数、デフォルトで0Floatスリープと再度チェック、デフォルトで0.05Float 、 browser.timeoutデフォルトで確認しようとする時間中 page . go_to ( "https://example.com/" )
page . at_xpath ( "//a[text() = 'No UI changes button']" ) . click
page . network . wait_for_idle # => true ネットワークのアイドルを待つか、 Ferrum::TimeoutErrorエラー。 wait_for_idleと同じ引数を受け入れます。
page . go_to ( "https://example.com/" )
page . at_xpath ( "//a[text() = 'No UI changes button']" ) . click
page . network . wait_for_idle! # might raise an error ページのキャッシュまたは収集されたトラフィックをクリアします。
Symbol :trafficまたは:cacheいずれかです traffic = page . network . traffic # => []
page . go_to ( "https://github.com/" )
traffic . size # => 51
page . network . clear ( :traffic )
traffic . size # => 0 指定されたオプションのリクエストインターセプトを設定します。この方法は、リクエストインターセプトのみを設定するため、コールバックon使用してリクエストをキャッチし、中止または継続する必要があります。
HashString *デフォルトでSymbolタイプの1つ browser = Ferrum :: Browser . new
page = browser . create_page
page . network . intercept
page . on ( :request ) do | request |
if request . match? ( /bla-bla/ )
request . abort
elsif request . match? ( /lorem/ )
request . respond ( body : "Lorem ipsum" )
else
request . continue
end
end
page . go_to ( "https://google.com" ) サイトまたはプロキシが承認を使用している場合、この方法を使用して資格情報を提供できます。
HashSymbol :server | :proxyサイトまたはプロキシ認証StringStringrequest.continueだけであっても気にしない場合、その後許可または拒否する必要がある認証されたリクエストを受け入れます。 page . network . authorize ( user : "login" , password : "pass" ) { | req | req . continue }
page . go_to ( "http://example.com/authenticated" )
puts page . network . status # => 200
puts page . body # => Welcome, authenticated client Chromeは、リクエストインターセプトを使用して承認を実施するため、承認されたリクエストを継続または中止する必要があります。インターセプトを使用しているコードを既に持っている場合は、ブロックなしでauthorizeを使用できますが、ブロックを渡す義務がある場合は、このバージョンはブロックを渡さず、正常に動作できます。
browser = Ferrum :: Browser . new
page = browser . create_page
page . network . intercept
page . on ( :request ) do | request |
if request . resource_type == "Image"
request . abort
else
request . continue
end
end
page . network . authorize ( user : "login" , password : "pass" , type : :proxy )
page . go_to ( "https://google.com" )以前はブロックなしでauthorizeメソッドを呼び出していましたが、リクエストインターセプトを使用して実装されているため、リクエストインターセプトも使用するコードの別の部分との衝突がある可能性があります。ブロックは現在必須です。
ネットワーク条件のエミュレーションをアクティブにします。
HashBooleanのエミュレートインターネット切断、デフォルトではfalseInteger送信されたリクエストからの最小レイテンシー(MS)、デフォルトで0Integer Maximal Aggregated DownloadSullput(BYTES/SEC)、 -1デフォルトでは、ダウンロードスロットリングを無効にしますInteger最大集計アップロードスループット(バイト/秒)、デフォルトで-1 、ダウンロードスロットリングを無効にするString Type既知の場合、いずれか、None、Cellular2G、Cellular3G、Cellular4G、Bluetooth、Ethernet、WiFi、Wimax、その他。デフォルトではnil page . network . emulate_network_conditions ( connection_type : "cellular2g" )
page . go_to ( "https://github.com/" ) ページのオフラインモードをアクティブにします。
page . network . offline_mode
page . go_to ( "https://github.com/" ) # => Ferrum::StatusError (Request to https://github.com/ failed(net::ERR_INTERNET_DISCONNECTED)) Boolean )各リクエストのキャッシュを無視するトグル。 Trueの場合、キャッシュは使用されません。
page . network . cache ( disable : true ) page.downloads
Array<Hash>ダウンロードされたファイルに関するすべての情報をHashとして返します。
page . go_to ( "http://localhost/attachment.pdf" )
page . downloads . files # => [{"frameId"=>"E3316DF1B5383D38F8ADF7485005FDE3", "guid"=>"11a68745-98ac-4d54-9b57-9f9016c268b3", "url"=>"http://localhost/attachment.pdf", "suggestedFilename"=>"attachment.pdf", "totalBytes"=>4911, "receivedBytes"=>4911, "state"=>"completed"}] ダウンロードが終了するまで待ちます。
page . go_to ( "http://localhost/attachment.pdf" )
page . downloads . waitまたは
page . go_to ( "http://localhost/page" )
page . downloads . wait { page . at_css ( "#download" ) . click } ダウンロードするファイルの場合の動作を設定します。
HashStringファイルを保存する場所の絶対パスSymbol deny | allow | allowAndName | default 、デフォルトでallow page . go_to ( "https://example.com/" )
page . downloads . set_behavior ( save_path : "/tmp" , behavior : :allow ) a :proxyオプションを使用してプロキシを設定できます。
Ferrum :: Browser . new ( proxy : { host : "x.x.x.x" , port : "8800" , user : "user" , password : "pa$$" } ) :bypass 、プロキシを使用すべきではないホストの半コロン分離されたリストを指定できます。
Ferrum :: Browser . new ( proxy : { host : "x.x.x.x" , port : "8800" , bypass : "*.google.com;*foo.com" } )一般に、ブラウザをインスタンス化するとプロキシオプションを渡すと、プロキシコマンドラインフラグでブラウザが実行され、すべてのページとコンテキストに影響します。独自のプロキシ設定を使用できる新しいコンテキストでページを作成できます。
browser = Ferrum :: Browser . new
browser . create_page ( proxy : { host : "x.x.x.x" , port : 31337 , user : "user" , password : "password" } ) do | page |
page . go_to ( "https://api.ipify.org?format=json" )
page . body # => "x.x.x.x"
end
browser . create_page ( proxy : { host : "y.y.y.y" , port : 31337 , user : "user" , password : "password" } ) do | page |
page . go_to ( "https://api.ipify.org?format=json" )
page . body # => "y.y.y.y"
endpage.mouse
ページを特定のx、yにスクロールします
IntegerInteger page . go_to ( "https://www.google.com/search?q=Ruby+headless+driver+for+Capybara" )
page . mouse . scroll_to ( 0 , 400 ) Mouse指定された座標をクリックし、マウスの動き、ダウン、アップイベントを発射します。
HashIntegerIntegerFloatデフォルトは0です。マウスダウンとマウスアップイベントの間の遅延Symbol :左| :右、デフォルト:左Integerデフォルトは1ですIntegerビットフィールド。 keyboard.modifiersを参照してくださいMouse指定された座標のマウスダウン。
HashSymbol :左| :右、デフォルト:左Integerデフォルトは1ですIntegerビットフィールド。 keyboard.modifiersを参照してくださいMouse与えられた座標用のマウスアップ。
HashSymbol :左| :右、デフォルト:左Integerデフォルトは1ですIntegerビットフィールド。 keyboard.modifiersを参照してくださいMouseマウスは与えられたxとyに移動します。
HashIntegerIntegerIntegerデフォルトは1にデフォルトです。中間のマウスモーブイベントを送信します。page.keyboard
Keyboardキーダウンイベントを発送します。
String | 「A」、Enter、:BackspaceなどのキーのSymbol名Keyboardキーアップイベントを発送します。
String | 「B」、Enter、:BackspaceなどのキーのSymbol名Keyboardテキスト内の各文字のキーダウン、キープレス/入力、およびキーアップイベントを送信します。
String | Array<String> | Array<Symbol>焦点を絞った要素に入力するテキスト、 [:Shift, "s"], "tring" Integer特定のキーのビットフィールドを返します
Array<Symbol> :alt | :ctrl | :コマンド| :シフトpage.cookies
Hash<String, Cookie>クッキーハッシュを返します
page . cookies . all # => {"NID"=>#<Ferrum::Cookies::Cookie:0x0000558624b37a40 @attributes={"name"=>"NID", "value"=>"...", "domain"=>".google.com", "path"=>"/", "expires"=>1583211046.575681, "size"=>178, "httpOnly"=>true, "secure"=>false, "session"=>false}>} Cookieクッキーを返します
String page . cookies [ "NID" ] # => <Ferrum::Cookies::Cookie:0x0000558624b67a88 @attributes={"name"=>"NID", "value"=>"...", "domain"=>".google.com", "path"=>"/", "expires"=>1583211046.575681, "size"=>178, "httpOnly"=>true, "secure"=>false, "session"=>false}> Booleanクッキーをセットします
HashStringStringStringIntegerが切れますStringBoolean page . cookies . set ( name : "stealth" , value : "omg" , domain : "google.com" ) # => trueCookie nid_cookie = page . cookies [ "NID" ] # => <Ferrum::Cookies::Cookie:0x0000558624b67a88>
page . cookies . set ( nid_cookie ) # => true Boolean与えられたクッキーを削除します
HashStringStringString page . cookies . remove ( name : "stealth" , domain : "google.com" ) # => true Boolean現在のページのすべてのCookieを削除します
page . cookies . clear # => true Boolean現在のページのすべてのクッキーをファイルに保存します。
# Cookies are saved into cookies.yml
page . cookies . store # => 15657 BooleanファイルからすべてのCookieをロードし、現在のページに設定します。
# Cookies are loaded from cookies.yml
page . cookies . load # => true page.headers
Hashすべてのヘッダーを取得します
Boolean与えられたヘッダーを設定します。最終的にすべてのヘッダーをクリアし、与えられたヘッダーを設定します。
Hashキー価値ペア"User-Agent" => "Browser"などBoolean指定されたヘッダーを追加して、すでに設定します。
Hashキーバリューペア"Referer" => "http://example.com" Booleanすべてのヘッダーをクリアします。
与えられたJS式の結果を評価して返します
String有効なJavaScriptでなければなりませんObject 、有効なNodeまたは単純な値である必要がありますが、引数を渡すことができます。 page . evaluate ( "[window.scrollX, window.scrollY]" ) 非同期発現と戻り結果を評価します
String有効なJavaScriptでなければなりませんObject 、有効なNodeまたは単純な値である必要がありますが、引数を渡すことができます。 page . evaluate_async ( %(arguments[0]({foo: "bar"})) , 5 ) # => { "foo" => "bar" } 式を実行します。結果は返されません
String有効なJavaScriptでなければなりませんObject 、有効なNodeまたは単純な値である必要がありますが、引数を渡すことができます。 page . execute ( %(1 + 1) ) # => true JavaScriptを評価して、ページの読み込み前に物事を変更します
String有効なJavaScriptでなければなりません browser . evaluate_on_new_document <<~JS
Object.defineProperty(navigator, "languages", {
get: function() { return ["tlh"]; }
});
JS BooleanHashStringStringStringString - デフォルトでtext/javascript page . add_script_tag ( url : "http://example.com/stylesheet.css" ) # => true BooleanHashStringStringString page . add_style_tag ( content : "h1 { font-size: 40px; }" ) # => true BooleanHashBooleanを有効にして、デフォルトではtrue page . bypass_csp # => true
page . go_to ( "https://github.com/ruby-concurrency/concurrent-ruby/blob/master/docs-source/promises.in.md" )
page . refresh
page . add_script_tag ( content : "window.__injected = 42" )
page . evaluate ( "window.__injected" ) # => 42 ロードされたHTMLソースからJavaScriptを無効にします。 JavaScriptをevaluateまたはexecuteして評価することができます。何も返しません。
page . disable_javascript デバイスの画面の寸法をオーバーライドし、ビューポートをエミュレートします。
HashInteger 、ビューポート幅。 0デフォルトでInteger 、ビューポートの高さ。 0デフォルトでFloat 、デバイススケールファクター。 0デフォルトでBoolean 、モバイルデバイスをエミュレートするかどうか。デフォルトでfalse page . set_viewport ( width : 1000 , height : 600 , scale_factor : 3 ) Array[Frame] | []現在のページが持っているすべてのフレームを返します。
page . go_to ( "https://www.w3schools.com/tags/tag_frame.asp" )
page . frames # =>
# [
# #<Ferrum::Frame @id="C6D104CE454A025FBCF22B98DE612B12" @parent_id=nil @name=nil @state=:stopped_loading @execution_id=1>,
# #<Ferrum::Frame @id="C09C4E4404314AAEAE85928EAC109A93" @parent_id="C6D104CE454A025FBCF22B98DE612B12" @state=:stopped_loading @execution_id=2>,
# #<Ferrum::Frame @id="2E9C7F476ED09D87A42F2FEE3C6FBC3C" @parent_id="C6D104CE454A025FBCF22B98DE612B12" @state=:stopped_loading @execution_id=3>,
# ...
# ] Frameページのメインフレーム、ツリーの上部、すべてのフレームの親を返します。
Frame | nil指定されたオプションでフレームを見つけます。
HashString - ブラウザが提供する一意のフレームのIDString -1つがある場合はフレームの名前 page . frame_by ( id : "C6D104CE454A025FBCF22B98DE612B12" ) Stringフレームの一意のID。
String | nil親フレームIDこれが別のものにネストされている場合。
IntegerJSが使用する実行コンテキストID、各フレームには、JSが評価する独自のコンテキストがあります。
String | nilフレームに名前が与えられた場合、ここにあるはずです。
Symbol | nilState State Frameの1つは次のとおりです。
:started_loading:navigated:stopped_loadingString現在のフレームの位置hrefを返します。
page . go_to ( "https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe" )
frame = page . frames [ 1 ]
frame . url # => https://interactive-examples.mdn.mozilla.net/pages/tabbed/iframe.html 現在のフレームのタイトルを返します。
page . go_to ( "https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe" )
frame = page . frames [ 1 ]
frame . title # => HTML Demo: <iframe> Boolean現在のフレームがページのメインフレーム(ツリーの上部)である場合。
page . go_to ( "https://www.w3schools.com/tags/tag_frame.asp" )
frame = page . frame_by ( id : "C09C4E4404314AAEAE85928EAC109A93" )
frame . main? # => false String現在のフレームの上部ウィンドウの位置hrefを返します。
page . go_to ( "https://www.w3schools.com/tags/tag_frame.asp" )
frame = page . frame_by ( id : "C09C4E4404314AAEAE85928EAC109A93" )
frame . current_url # => "https://www.w3schools.com/tags/tag_frame.asp" String現在のフレームのトップウィンドウタイトルを返します。
page . go_to ( "https://www.w3schools.com/tags/tag_frame.asp" )
frame = page . frame_by ( id : "C09C4E4404314AAEAE85928EAC109A93" )
frame . current_title # => "HTML frame tag" String現在のフレームのHTMLを返します。
page . go_to ( "https://www.w3schools.com/tags/tag_frame.asp" )
frame = page . frame_by ( id : "C09C4E4404314AAEAE85928EAC109A93" )
frame . body # => "<html><head></head><body></body></html>" 現在のフレームのDoctypeを返します。
page . go_to ( "https://www.w3schools.com/tags/tag_frame.asp" )
page . main_frame . doctype # => "<!DOCTYPE html>" 特定のフレームのコンテンツを設定します。
String page . go_to ( "https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe" )
frame = page . frames [ 1 ]
frame . body # <html lang="en"><head><style>body {transition: opacity ease-in 0.2s; }...
frame . content = "<html><head></head><body><p>lol</p></body></html>"
frame . body # => <html><head></head><body><p>lol</p></body></html> 該当する場合は、指定されたテキストまたはデフォルトのプロンプトでダイアログを受け入れる
String ダイアログを却下します
page . on ( :dialog ) do | dialog |
if dialog . match? ( /bla-bla/ )
dialog . accept
else
dialog . dismiss
end
end
page . go_to ( "https://google.com" ) CSSアニメーションを減速またはスピードアップできます。
Integer CSSアニメーションの再生率を返し、デフォルトは1になります。
CSSアニメーションの再生率を設定します
Integer page . playback_rate = 2000
page . go_to ( "https://google.com" )
page . playback_rate # => 2000 Boolean Frame現在のノードのフレームオブジェクトを返し、そのオブジェクトにファインダーを使用し続けることができます。
frame = page . at_xpath ( "//iframe" ) . frame # => Frame
frame . at_css ( "//a[text() = 'Log in']" ) # => Node Boolean Array<Node> Node | nil ): Boolean (チェーン可能)渡された属性によってオプションを選択します。
page . at_xpath ( "//*[select]" ) . select ( [ "1" ] ) # => Node (select)
page . at_xpath ( "//*[select]" ) . select ( [ "text" ] , by : :text ) # => Node (select)文字列、配列、または文字列を受け入れる:
page . at_xpath ( "//*[select]" ) . select ( "1" )
page . at_xpath ( "//*[select]" ) . select ( "1" , "2" )
page . at_xpath ( "//*[select]" ) . select ( [ "1" , "2" ] ) tracing.recordを使用して、Chrome DevtoolsまたはTimeLine Viewerで開くことができるトレースファイルを作成できます。
page . tracing . record ( path : "trace.json" ) do
page . go_to ( "https://www.google.com" )
end Stringブロックを受け入れ、トレースを記録し、デフォルトでTracing.tracingCompleteイベントからトレースデータを出力として返します。 pathが指定されている場合、 trueを返し、保存してデータをファイルにトレースします。
HashStringディスクにデータをnilで保存しますSymbol :base64 | :binaryエンコード出力はbase64またはプレーンテキストとして。 :binaryFloat指定された時間でファイルストリーミングが終了するまで待機するか、エラーを上げます。デフォルトはnilになりますBooleanキャプチャスクリーンショット、デフォルトではfalseHash<String, Object> config for trace、カテゴリについては、GetCategoriesを参照してください。ブラウザごとに一度にアクティブにできるのは1つのTrace構成のみです。 Browserインスタンスによって開かれたブラウザタブを閉じます。
# connect to a long-running Chrome process
browser = Ferrum :: Browser . new ( url : 'http://localhost:9222' )
browser . go_to ( "https://github.com/" )
# clean up, lest the tab stays there hanging forever
browser . reset
browser . quit フェラムは完全にスレッドセーフです。 1つのブラウザまたはいくつかのブラウザを作成して、スレッドの使用を開始できます。以下の例は、同じコンテキストを共有するいくつかのページを作成する方法を示しています。コンテキストはシークレットプロファイルに似ていますが、複数のプロファイルを持つことができます。独立したブラウザセッションのように考えてください。
browser = Ferrum :: Browser . new
context = browser . contexts . create
t1 = Thread . new ( context ) do | c |
page = c . create_page
page . go_to ( "https://www.google.com/search?q=Ruby+headless+driver+for+Capybara" )
page . screenshot ( path : "t1.png" )
end
t2 = Thread . new ( context ) do | c |
page = c . create_page
page . go_to ( "https://www.google.com/search?q=Ruby+static+typing" )
page . screenshot ( path : "t2.png" )
end
t1 . join
t2 . join
context . dispose
browser . quitまたは、2つの独立したコンテキストを作成できます。
browser = Ferrum :: Browser . new
t1 = Thread . new ( browser ) do | b |
context = b . contexts . create
page = context . create_page
page . go_to ( "https://www.google.com/search?q=Ruby+headless+driver+for+Capybara" )
page . screenshot ( path : "t1.png" )
context . dispose
end
t2 = Thread . new ( browser ) do | b |
context = b . contexts . create
page = context . create_page
page . go_to ( "https://www.google.com/search?q=Ruby+static+typing" )
page . screenshot ( path : "t2.png" )
context . dispose
end
t1 . join
t2 . join
browser . quit リポジトリをチェックした後、 bundle installを実行して依存関係をインストールします。
次に、 bundle exec rake testを実行してテストを実行します。また、実験を可能にするインタラクティブなプロンプトのbin/consoleを実行することもできます。
この宝石をローカルマシンにインストールするには、 bundle exec rake install実行します。新しいバージョンをリリースするには、 version.rbのバージョンbundle exec rake releaseを更新してから、バージョンのgitタグを作成し、Git Commitsと作成したタグをプッシュし、 .gemファイルをRubygems.orgにプッシュします。
GitHubでバグレポートとプルリクエストを歓迎します。
宝石は、MITライセンスの条件の下でオープンソースとして利用できます。