2017-11-15 17 views
1

저는 Watir 및 Chrome Headless를 사용하여 HTML 페이지에서 텍스트를 가져 오는 레일 앱을 작성하고 있습니다. 지금까지 좋은 모든 것!.goto 비 차단을 어떻게 만들 수 있습니까?

로드 시간이 긴 페이지를 요청하여 모두 요소를 완전히로드해야 할 때 문제가 발생합니다.

현재 코드는 내가 사용

browser = Watir::Browser.new :chrome, headless: true 

browser.goto(url) 

.goto 함수 호출하지만, 모든 요소까지 블록 넣은. 그건 내가 필요로하는 것이 아니다. 내가 필요로하는 것은 goto가 페이지를 가져 오기 시작한 다음 필요로하는 텍스트가 나타날 때까지 기다리고 코드를 가져 오기만하면되기 때문에 코드를 계속 실행하는 것이다.

아이디어가 있으십니까?

답변

1

페이지 이동 시간이 60 초를 초과하면 고토가 컨트롤을 떠나지 않고 60 초를 초과하면 오류가 발생합니다. 또한 Watir.default_timeout은 Goto의 페이지 로딩과 관련이 없습니다. Watir과 그

에 대한 systax 아래의 코드를 작성, 당신은 당신이 원하는 것을 얻을 수를 제공하지 않았기 때문에 나는 아래에했던 것처럼 당신은 당신이 직접 전화 셀레늄 드라이버가 할 수를 Page_Load에 대한 타이밍을 설정해야

begin 
    b.driver.manage.timeouts.page_load=5 
    b=Watir::Browser.new 
    b.goto(url) 
rescue   #I have written the rescue block here because goto will the error for you If page is not loaded within a given time 
end 

다음은 예를 들어, 여기에 코드를 당신의 나머지를 쓸 수 있습니다, 여기에서 발생하는 것은

puts b.span(text: 'something').text 

는, 고토 5 초 동안 고토 다음 코드의 실행을 차단 될 다음 것이다 그것은 구조 블록에 빠질 것이고, 그래서 progra m은 예상대로 다음 줄을 계속 실행합니다.

1

새로운 w3c webdriver 사양을 사용하면 페이지로드 전략을 '없음'으로 설정할 수 있습니다. https://w3c.github.io/webdriver/webdriver-spec.html#navigation

Firefox와 IE만이 이미 구현되었을 수 있습니다.

+1

귀하의 답변은 분명히 정확한 답변이지만, 슬픈 듯이 크롬 운전자는 아직이를 지원하지 않습니다. Raj의 해결 방법은 모범 사례는 아니지만 Chrome을 사용하면서 달성하고 싶은 것을 성취 할 수 있습니다. 잘하면 Chromium 팀이 앞으로이 문제를 해결하고 더 깨끗한로드 전략 옵션을 사용할 수 있습니다. –