它是紅寶石乾淨的,高級的API到Chrome。默認情況下,無頭運行,但是您可以將其配置為以頭部模式運行。您只需要Ruby,Chrome或Chromium。 Ferrum通過CDP協議連接到瀏覽器,並且沒有Selenium/Web Driver/Chromedriver依賴性。重點是對RAW CDP協議的重點,因為Chrome允許您做很多Web Driver幾乎沒有支持的事情,因為它應該與其他瀏覽器具有一致的設計。
Cuprite是基於Ferrum的Capybara的純紅寶司機。如果您要去爬網站,則最好因為爬行而不是測試,因此最好使用Ferrum或船隻。
船隻基於Ferrum和機械化的高級網絡爬行框架。
Linux沒有官方的鉻或鉻套件不會以這種方式安裝,因為它已經過時或非正式,都不好。從Chrome或Chromium的官方來源下載它。 Chrome Binary應該在PATH或BROWSER_PATH中,您可以將其作為選項將其傳遞給瀏覽器實例,請參見:browser_path在自定義中。
將其添加到您的Gemfile並運行bundle install 。
gem "ferrum" 導航到網站並保存屏幕截圖:
browser = Ferrum :: Browser . new
browser . go_to ( "https://google.com" )
browser . screenshot ( path : "google.png" )
browser . quit當您使用瀏覽器實例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中,您必須傳遞No-SandBox瀏覽器選項:
Ferrum :: Browser . new ( browser_options : { 'no-sandbox' : nil } )還報導說,在M1 MAC上跑到Docker容器中時,Chrome過程反复崩潰,以防止Ferrum工作。當在非M1 Mac上部署到Docker容器時,Ferrum應按預期工作。
您可以在測試設置中使用以下代碼自定義選項:
Ferrum :: Browser . new ( options )Hash:headless true情況下,將瀏覽器設置為無頭或無頭。您可以設置"new"以支持新的無頭模式。:xvfb (boolean) - 在虛擬框架器中運行瀏覽器,默認情況下為false 。:flatten (Boolean) - 使用一個Websocket連接到瀏覽器和所有頁面以平坦模式。:window_size (array) - 瀏覽器窗口的尺寸在其中測試,以2個元素數組表示,例如[1024,768]。默認值:[1024,768]:extensions (array [string | hash]) - 文件或js源代碼的一系列路徑,要預加載到瀏覽器中: ["/path/to/script.js", { source: "window.secret = 'top'" }]:logger (對象響應puts ) - 當存在時,將調試輸出寫入此對象。:slowmo (integer | float) - 在發送命令之前將延遲設置為幾秒鐘。無頭選項的有用伴侶,因此您有時間看到更改。:timeout (數字) - 與瀏覽器通信時,我們將等待響應的秒數。默認值為5。:js_errors (布爾值) - 當Ruby中,JavaScript錯誤會重新升高。:pending_connection_errors (boolean) - 當主幀仍在等待緩慢的響應時,請及時提高PendingConnectionsError 。最好弄清楚為什麼您的響應緩慢,修復或阻止它們,而不是關閉此設置。默認是正確的。:browser_name (符號) - :chrome ,僅實驗支持:firefox 。:browser_path (string) - 通往Chrome二進制的路徑,您還可以將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 (字符串) - 無頭鉻的遠程調試地址。:url (string) - Chrome運行實例的URL。如果設置此設置,則不會產生瀏覽器過程。:ws_url (String) - Chrome運行實例的WebSocket URL。如果設置此設置,則不會產生瀏覽器過程。優先級高於:url ,設置兩者都沒有意義。:process_timeout (integer) - 等待鉻流程在啟動時響應多長時間。:ws_max_receive_size (INTEGER) - 在字節中從Web插座上接受Chrome的大消息。默認為64MB。傳入的消息大於此會導致Ferrum::DeadBrowserError 。:proxy (哈希) - 指定代理設置,閱讀更多:save_path (string) - 用內容分配標頭保存附件的路徑。:env (哈希) - 您想通過的環境變量String導航頁面。
String URL應包括方案,除非您在配置驅動程序時設置base_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 | nil通過XPath查找節點。
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返回當前頂部窗口位置HREF。
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將屏幕截圖保存在磁盤上或將其返回為基本64。
HashString以在磁盤上保存屏幕快照。 :encoding將設置為:binarySymbol :base64 | :binary您可以將其設置為返回圖像為base64String “ jpeg”(“ jpg”)| “ PNG” | “ WebP”Integer 0-100僅適用於JPEGBoolean無論您需要全頁屏幕截圖還是視圖String 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 | Boolean將PDF保存在磁盤上或將其返回為base64。
Hash :路徑String以將PDF保存在磁盤上。 :encoding將設置為:binary
:編碼Symbol :base64 | :binary您可以將其設置為返回pdf為base64
:景觀Boolean紙取向。默認為false。
:秤Float縮放進出
:格式symbol標準紙尺寸:字母,:法律,:小報,:分類帳,:a0,:a1,:a2,:a3,:a3,:a4,: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 | Integer將MHTML保存在磁盤上或將其返回為字符串。
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在我們什麼時候嘗試檢查idle, 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其中一種資源類型之一 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最大匯總下載吞吐量(bytes/sec), -1默認情況下,禁用下載throttlingInteger最大匯總上傳吞吐量(bytes/sec), -1默認情況下,禁用下載throttlingString連接類型如果已知,則是:無:cellular2g,cellular3g,cellular4g,藍牙,以太網,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 )為每個請求切換忽略緩存。如果是真的,將不會使用緩存。
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 ) 您可以設置一個具有: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
Integer沿著您想要顯示在左上方顯示的文檔的水平軸的像素Integer沿著您想要顯示在左上方的文檔的垂直軸的像素 page . go_to ( "https://www.google.com/search?q=Ruby+headless+driver+for+Capybara" )
page . mouse . scroll_to ( 0 , 400 ) Mouse單擊給定的坐標,啟動鼠標移動,向下和向上事件。
HashIntegerIntegerFloat默認值為0。鼠標向下和鼠標UP事件之間的延遲Symbol :左| :對,默認為:左Integer默認為1Integer BITFIELD,用於關鍵修飾符。請參閱keyboard.modifiers Mouse鼠標降低給定坐標。
HashSymbol :左| :對,默認為:左Integer默認為1Integer BITFIELD,用於關鍵修飾符。請參閱keyboard.modifiers Mouse鼠標以給定坐標。
HashSymbol :左| :對,默認為:左Integer默認為1Integer BITFIELD,用於關鍵修飾符。請參閱keyboard.modifiers Mouse鼠標移動給定X和Y。
HashIntegerIntegerInteger默認為1。發送中間的Mousemove事件。page.keyboard
Keyboard調度鍵盤事件。
String |鍵的Symbol名稱,例如“ a”,:enter,:backpace Keyboard派遣關鍵事件。
String |鍵的Symbol名稱,例如“ B”,:Enter,:Backspace Keyboard為文本中的每個字符發送一個鍵down,按鍵/輸入和鍵盤事件。
String | Array<String> | Array<Symbol>一個要輸入重點元素的文本, [:Shift, "s"], "tring" Integer返回給定鍵的Bitfield
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返回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設置一個cookie
HashStringStringStringIntegerStringBoolean 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刪除當前頁面的所有餅乾
page . cookies . clear # => true Boolean將當前頁面的所有cookie存儲在文件中。
# 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應有效JavaScriptObject您可以通過參數,儘管它應該是有效的Node或一個簡單的值。 page . evaluate ( "[window.scrollX, window.scrollY]" ) 評估異步表達和返回結果
String應有效JavaScriptObject您可以通過參數,儘管它應該是有效的Node或一個簡單的值。 page . evaluate_async ( %(arguments[0]({foo: "bar"})) , 5 ) # => { "foo" => "bar" } 執行表達式。不返回結果
String應有效JavaScriptObject您可以通過參數,儘管它應該是有效的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。您仍然可以通過evaluate或execute評估JavaScript。什麼都沒有返回。
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 - 幀的名稱如果有一個 page . frame_by ( id : "C6D104CE454A025FBCF22B98DE612B12" ) String框架的獨特ID。
String | nil父框架ID如果該ID嵌套在另一個中。
IntegerJS使用的執行上下文ID具有JS評估的其自身上下文。
String | nil如果給出一個名稱,則應該在這裡。
Symbol | nil州框架之一:
: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>" 返回當前框架的醫生。
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在磁盤上保存數據,默認nilSymbol :base64 | :binary編碼輸出為base64或純文本。 :binaryFloat等到在指定的時間中文件流完成或增加錯誤,默認為nilBoolean捕獲屏幕截圖,默認為falseHash<String, Object> for trace,對於類別,請參見getCategories,每個瀏覽器一次只能有一個跟踪配置。 關閉瀏覽器實例打開的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 Ferrum是完全螺紋安全的。您可以根據需要創建一個瀏覽器或一些瀏覽器,然後開始使用線程進行播放。下面顯示瞭如何創建一些共享相同上下文的頁面。上下文類似於隱身配置文件,但是您可以擁有多個,可以將其視為獨立瀏覽器會話:
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或者您可以創建兩個獨立的上下文:
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以獲得交互提示,該提示可以讓您進行實驗。
要將此GEM安裝到本地計算機上,請運行bundle exec rake install 。要發布新版本,請在version.rb中更新版本編號,然後運行bundle exec rake release ,該版本將為版本創建一個git標籤,推送git consits和創建標籤,然後將.gem文件推到rubygems.org。
歡迎在GitHub上進行錯誤報告和拉動請求。
根據MIT許可證的條款,該寶石可作為開源。