크롬에 대한 루비 깨끗하고 고급 API입니다. 기본적으로 헤드리스를 실행하지만 헤드 풀 모드에서 실행하도록 구성 할 수 있습니다. 루비와 크롬 또는 크롬 만 있으면됩니다. Ferrum은 CDP 프로토콜에 의해 브라우저에 연결되며 Selenium/Webdriver/Chromedriver 의존성은 없습니다 . Chrome은 다른 브라우저와 일관된 설계를 가져야하기 때문에 WebDriver가 거의 지원하지 않는 많은 작업을 수행 할 수 있기 때문에 원시 CDP 프로토콜에 중점을 두었습니다.
Cuprite는 Ferrum을 기반으로 한 Capybara의 순수한 루비 드라이버입니다. 크롤링 사이트에 가려면 테스트가 아닌 기어 다니기 때문에 Ferrum 또는 Vessel을 사용하는 것이 좋습니다.
Ferrum 및 Mechanize를 기반으로 한 선박 고급 웹 크롤링 프레임 워크.
Linux 용 공식 크롬 또는 크롬 패키지는 구식이거나 비공식적이기 때문에이 방법으로 설치하지 않으며 둘 다 나쁘기 때문에이 방법으로 설치하지 않습니다. Chrome 또는 Chromium의 공식 소스에서 다운로드하십시오. 크롬 바이너리는 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일부 자바 스크립트를 평가하고 전체 너비/높이를 얻으십시오.
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이 작동하는 것을 방지합니다. Ferrum은 비 M1 Mac의 Docker 컨테이너에 배포 될 때 예상대로 작동해야합니다.
테스트 설정에서 다음 코드로 옵션을 사용자 정의 할 수 있습니다.
Ferrum :: Browser . new ( options )Hash:headless (String | Boolean) - 기본적으로 브라우저를 헤드리스 true 로 설정하십시오. 새로운 헤드리스 모드를 지원하기 위해 "new" 설정할 수 있습니다.:xvfb (부울) - 기본적으로 false 에서 가상 프레임 버퍼에서 브라우저를 실행합니다.:flatten (부울) - 브라우저에 하나의 WebSocket 연결을 사용하고 모든 페이지를 평평한 모드로 사용하십시오.:window_size (배열) - 테스트 할 브라우저 창의 치수, 예를 들어 2 요소 배열로 표현됩니다 [1024, 768]. 기본값 : [1024, 768]:extensions (Array [String | Hash]) - 브라우저로 사전로드 할 파일 또는 JS 소스 코드에 대한 경로 배열 예를 들어 : ["/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 가 올라갑니다. 응답이 느린 이유를 파악 하고이 설정을 끄지 않고 고치거나 차단하는 것이 좋습니다. 기본값은 사실입니다.:browser_name (Symbol) - :chrome 기본적으로 다음에 대한 실험적 지원 만 있습니다 :firefox .:browser_path (Strom) - 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 (String) - 헤드리스 크롬의 원격 디버깅 주소.:url (String) - Chrome의 실행중인 인스턴스에 대한 URL. 이 설정이 설정되면 브라우저 프로세스가 생성되지 않습니다.:ws_url (Strome) - Chrome의 실행중인 인스턴스에 대한 WebSocket URL. 이 설정이 설정되면 브라우저 프로세스가 생성되지 않습니다. :url 둘 다 설정이 의미가 없습니다.:process_timeout (Integer) - Chrome 프로세스가 시작시 대답을 기다리는 데 걸리는 시간.:ws_max_receive_size (정수) - 바이트의 웹 소켓을 통해 Chrome에서 Chrome에서 허용하는 큰 메시지. 기본값은 64MB입니다. 이보다 더 큰 들어오는 메시지는 Ferrum::DeadBrowserError 유발합니다.:proxy (HASH) - 프록시 설정을 지정하고 자세히 알아보십시오:save_path (string) - 컨텐츠 방향 헤더로 첨부 파일을 저장하는 경로.:env (HASH) - 과정으로 전달하려는 환경 변수 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 | 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 :binary 으로 설정됩니다Symbol :base64 | :binary 이미지를 Base64로 반환하도록 설정할 수 있습니다.String "jpeg"( "jpg") | "png"| "웹"Integer 0-100은 JPEG에만 작동합니다Boolean 전체 페이지 스크린 샷이 필요한지 또는 뷰포트가 필요한지 여부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 : 디스크에 pdf를 저장하기위한 경로 String . :encoding :binary 으로 설정됩니다
: 인코딩 Symbol :base64 | :binary PDF를 Base64로 반환하도록 설정할 수 있습니다.
: 풍경 Boolean 종이 방향. 기본값으로 거짓.
: Float /아웃을 스케일로 스케일하십시오
: 형식 symbol 표준 용지 크기 : 문자, : 법률, : 타블로이드, : 원장, : a0, : a1, : a2, : a4, : a5, : a6
: paper_width Float set 종이 너비
: 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.05 다시 확인하십시오.browser.timeout 확인하려고 시간 동안 타임 아웃 Float 기본적으로 플로트 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 방법을 호출했지만 요청 인터 셉션을 사용하여 구현되기 때문에 요청 가로 채기를 사용하는 코드의 다른 부분과 충돌이 발생할 수 있으므로 Code가 거부하는 동안 요청을 허용하지만 너무 늦었습니다. 블록은 이제 필수입니다.
네트워크 조건의 에뮬레이션을 활성화합니다.
HashBoolean 인터넷 연결 끊기, false 기본적으로Integer 수신 헤더 (MS)로 전송 된 요청에서 최소 대기 시간, 기본적으로 0Integer 최대 집계 된 다운로드 처리량 (Bytes/Sec), -1 기본적으로 다운로드 스로틀을 비활성화합니다.Integer 최대 집계 업로드 처리량 (Bytes/Sec), -1 기본적으로 다운로드 스로틀 링을 비활성화합니다.String 연결 유형 알려진 경우 : none, cellular2g, cellular3g, cellular4g, bluetooth, etternet, wi -fi, 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 ) 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"
end page.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텍스트의 각 문자에 대한 Keydown, Keypress/Input 및 KeyUp 이벤트를 보냅니다.
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쿠키를 반환합니다
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현재 페이지의 모든 쿠키를 제거합니다
page . cookies . clear # => true Boolean현재 페이지의 모든 쿠키를 파일에 저장합니다.
# Cookies are saved into cookies.yml
page . cookies . store # => 15657 Boolean파일에서 모든 쿠키를로드하고 현재 페이지로 설정합니다.
# 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 BooleanHashtrue 으로 Boolean 활성화를 활성화합니다 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 소스에서 Javascripts를 비활성화합니다. evaluate 또는 execute 으로 여전히 JavaScript를 평가할 수 있습니다. 아무것도 반환하지 않습니다.
page . disable_javascript 장치 화면 치수를 무시하고 뷰포트를 에뮬레이트합니다.
HashInteger , 뷰포트 너비. 기본적으로 0Integer , 뷰포트 높이. 기본적으로 0Float , 장치 스케일 팩터. 기본적으로 0Boolean , 모바일 장치를 모방할지 여부. 기본적으로 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가 다른 하나에 중첩되어있는 경우.
Integer실행 컨텍스트 ID JS에서 사용하는 각 프레임에는 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>" 현재 프레임의 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 또는 타임 라인 뷰어에서 열 수있는 추적 파일을 만들 수 있습니다.
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> 추적에 대한 구성, 범주의 경우 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 실행할 수도 있습니다.
이 보석을 로컬 컴퓨터에 설치하려면 bundle exec rake install 실행하십시오. 새 버전을 해제하려면 version.rb 에서 버전 번호를 업데이트 한 다음 bundle exec rake release 에 대한 GIT 태그를 생성하고 Git Commits 및 생성 된 태그를 푸시하고 .gem 파일을 rubygems.org로 누릅니다.
Github에서 버그 보고서 및 풀 요청을 환영합니다.
보석은 MIT 라이센스의 조건에 따라 오픈 소스로 제공됩니다.