2017-09-16 17 views
6

아마도 이것을 소개하는 가장 중요한 것은 제가 c9를 사용하고 있다는 것입니다. 클라우드의 IDE이므로 Chrome 또는 Firefox와 Watir을 함께 사용하려고 할 때 많은 문제가 발생합니다. Chrome 또는 Firefox 브라우저에 대한 경로를 쓸 수 없기 때문입니다. 나는 또한 찾을 수있는 모든 대기 방식의 변형을 시도했지만 그 중 어느 것도 작동하지 않습니다.웹 페이지를 방문한 후 어떤 요소를 찾으려고 할 때 Watir 시간이 초과되었습니다.

def save 
    require 'watir' 
    require 'phantomjs' 

    @browser = Watir::Browser.new :phantomjs 
    @browser.goto "https://kroger.softcoin.com/programs/kroger/digital_coupons/?origin=DigitalCoupons&banner=Smiths#contentBox" 

    @browser.div(id: "contentBox").wait_until(&:present?).text 
    @products = @browser.divs 

end 

오류

는 "contentBox"#에 진정한 상태를 기다리고, 30 초 후에 시간 초과 : TAG_NAME => "DIV"}>

나는이 문제를 해결하려는 방법 Smiths 웹 사이트에서 데이터를 스크래핑하지 못하는 경우 크롬 브라우저를 사용하지만 "chromedriver 127.0.0.1:9515에 연결할 수 없습니다"라는 오류 메시지가 나타납니다.

+0

Firefox에서는 제대로 작동하며 wait_until() 메소드를 사용할 필요가 없습니다. 왜냐하면 자동으로 : exist : present : enabled를 기다리기 때문입니다. 파이어 폭스 용 geckodriver를 사용하지 마십시오. 레거시 파이어 폭스를 사용하십시오. 제대로 작동합니다. – RAJ

+2

절대적으로 필요한 경우가 아니면 레거시 Firefox를 사용하지 마십시오. geckodriver는이 시점에서 완전한 기능에 가깝습니다. 레거시 파이어 폭스는 곧 출시 될 Selenium 4에서는 옵션이 될 수 없을 것입니다. Chrome 드라이버는 현재 가장 잘 지원됩니다. Phantomj를 대신하여'Watir :: Browser.new : chrome, headless : true'를 확인하십시오. 훨씬 빠르며 유령은 더 이상 사용되지 않습니다. – titusfortner

+0

@titusfortner 파이어 폭스가 52SEV 버전에서 셀레늄에 대한 지원을 복구한다는 것을 알고 계십니까? – RAJ

답변

2

비슷한 문제가있어서 webdrivers 보석을 설치하면 문제

$gem install webdrivers

+0

시도했지만 작동하지 않았습니다. – ChrisWilson

3

나는 비슷한 문제 을했고 나는 명령 셀레늄

# docker-compose.yml file 
version: '2' 
services: 
    selenium: 
    image: selenium/standalone-chrome 
    ports: 
     - "4444:4444" 
    restart: always 
    volumes: 
     - "${PWD}/spec:${PWD}/spec" # I exposed `spec` dir to cover code with specs 
     - /dev/shm:/dev/shm 


# test.rb file 
@browser = Watir::Browser.new(
    :remote, 
    url: 'http://localhost:4444/wd/hub' 
) 

실행 컨테이너를 고정 표시기 컨테이너를 설치하여 그것을 해결 :

docker run -it -d -P -p 4444:4444 -v `pwd`/spec:`pwd`/spec selenium/standalone-chrome 

그리고 (다시

시도 또한 VPS 나 다른 레모에서도 컨테이너를 실행할 수 있습니다. te 서버에 연결 한 다음 연결하십시오)