Как проверить наличие элемента на веб-странице с помощью RSelenium?

Я пытался получить данные о списках недвижимости с веб-сайта, где иногда есть кнопка «Просмотреть больше», чтобы загрузить больше результатов, а иногда ее там нет. В первом случае я использовал следующий код, и он отлично работает. Например,

  url<- "http://www.magicbricks.com/property-for-rent/residential-real-estate?bedroom=2&proptype=Multistorey-Apartment,Builder-Floor-Apartment,Penthouse,Studio-Apartment,Service-Apartment,Residential-House,Villa&cityName=Navi-Mumbai&Locality=Vashi"
  remDr$navigate(url)
  Sys.sleep(3)
  webElem <- remDr$findElement("css", "#viewMoreButton a")
  while(webElem$isElementDisplayed()[[1]]){
    tryCatch({
      Sys.sleep(1)
      webElem <- remDr$findElement("css", "#viewMoreButton a")
      webElem$clickElement()
    }, error=function(e){})
  }
  mb<- read_html(remDr$getPageSource()[[1]])

Но во втором случае это не работает. Например:

  url<- "http://www.magicbricks.com/property-for-rent/residential-real-estate?bedroom=4&proptype=Multistorey-Apartment,Builder-Floor-Apartment,Penthouse,Studio-Apartment,Service-Apartment,Residential-House,Villa&cityName=Navi-Mumbai&Locality=Vashi"
  remDr$navigate(url)
  Sys.sleep(3)
  webElem <- remDr$findElement("css", "#viewMoreButton a")
  while(webElem$isElementDisplayed()[[1]]){
    tryCatch({
      Sys.sleep(1)
      webElem <- remDr$findElement("css", "#viewMoreButton a")
      webElem$clickElement()
    }, error=function(e){})
  }
  mb<- read_html(remDr$getPageSource()[[1]])

Этот код застревает на строке «WebElem‹- renDr$findElement()» и не движется вперед или выдает ошибку.

Что я делаю не так?


person Nadeem Hussain    schedule 01.11.2016    source источник
comment
Во втором примере нет viewMoreButton для нажатия на страницу   -  person jdharrison    schedule 02.11.2016
comment
@jdharrison да, так что не следует ли в этом случае пропустить код внутри цикла while и перейти к чтению страницы?   -  person Nadeem Hussain    schedule 02.11.2016
comment
Запустив ваш код, я получаю: Error: Summary: NoSuchElement когда я запускаю webElem <- remDr$findElement("css", "#viewMoreButton a") . Цикл while никогда не выполняется, выдавая ошибку Error: object 'webElem' not found, как и ожидалось, поскольку webElem никогда не назначался.   -  person jdharrison    schedule 02.11.2016


Ответы (1)


Добавление условия if решает проблему:

  url<- "http://www.magicbricks.com/property-for-rent/residential-real-estate?bedroom=4&proptype=Multistorey-Apartment,Builder-Floor-Apartment,Penthouse,Studio-Apartment,Service-Apartment,Residential-House,Villa&cityName=Navi-Mumbai&Locality=Vashi"
  remDr$navigate(url)
  Sys.sleep(3)
  if(length(remDr$findElements("css", "#viewMoreButton a"))!=0){
    while(webElem$isElementDisplayed()[[1]]){
      tryCatch({
      Sys.sleep(1)
      webElem <- remDr$findElement("css", "#viewMoreButton a")
      webElem$clickElement()
      }, error=function(e){})
    }
  }
  mb<- read_html(remDr$getPageSource()[[1]])
person Nadeem Hussain    schedule 03.11.2016