Невозможно прокрутить вниз и очистить данные в правильном формате с помощью Rselenium - PullRequest
0 голосов
/ 11 марта 2019

Я новичок в Rselenium и пытаюсь очистить данные с сайта ниже, используя Rselenium

https://www.google.com/search?client=firefox-b-1-ab&ei=fthAXLWfC8qp_QavqbGIDQ&q=fox+volkswagen+rochester+hills&oq=&gs_l=psy-ab.3.5.35i39l6.24734.25762..29755...1.0..0.114.114.0j1......0....1..gws-wiz.....6..0i71j0j0i131.7sWXKnj597Y#lrd=0x8824e9cf8f68257b:0xc45f1982878cfc94,1,,,

Я использую приведенный ниже код, чтобы очистить все данные в определенном порядке и прокрутить вниз до концастр.

#Manually setting up selenium server to start_______________


selCommand<- 
  wdman::selenium(jvmargs = c("-Dwebdriver.chrome.verboseLogging=true"), 
                  retcommand = TRUE)
cat(selCommand)


#Start the server______________
rmDr <- remoteDriver(port = 4567L, browserName = "firefox")
rmDr$open()

#Navigate to the url
rmDr$navigate("https://www.google.com/search?client=firefox-b-1-ab&ei=fthAXLWfC8qp_QavqbGIDQ&q=fox+volkswagen+rochester+hills&oq=&gs_l=psy-ab.3.5.35i39l6.24734.25762..29755...1.0..0.114.114.0j1......0....1..gws-wiz.....6..0i71j0j0i131.7sWXKnj597Y#lrd=0x8824e9cf8f68257b:0xc45f1982878cfc94,1,,,")

#click on the snippet to switch focus----------
webEle <- rmDr$findElement(using = "css",value = ".review-snippet")
webEle$clickElement()
# Save page source
pagesource= rmDr$getPageSource()[[1]]

#simulate scroll down for several times-------------
count=read_html(pagesource) %>%
  html_nodes(".p13zmc") %>%
  html_text()

Ниже приведена часть кода, в которой возникают проблемы. Я попробовал два способа заставить прокрутку работать.Однако это не работает.Я вручную прокрутил страницу вниз, чтобы проверить, она должна быть близка к 31 разу.

#Stores the number of reviews for the url, so we know how many times to scroll down
scroll_down_times=count %>%
  str_sub(1,nchar(count)-5) %>%
  as.numeric()

for(i in 1 :scroll_down_times){
  webEle$sendKeysToActiveElement(sendKeys = list(key="page_down"))
  #the content needs time to load,wait 1.2 second every 5 scroll downs
  if(i%%5==0){
    Sys.sleep(1.2)
  }
}


# Keep scrolling down page, loading new content each time. 
last_height = 0 #
repeat {   
  remDr$executeScript("window.scrollTo(0,document.body.scrollHeight);")
  Sys.sleep(3) #delay by 3sec to give chance to load. 

  # Updated if statement which breaks if we can't scroll further 
  new_height = remDr$executeScript("return document.body.scrollHeight")
  if(unlist(last_height) == unlist(new_height)) {
    break
  } else {
    last_height = new_height
  }
}

После настройки прокрутки вниз я собираю данные

#loop and simulate clicking on all "click on more" elements-------------
webEles <- rmDr$findElements(using = "css",value = ".review-more-link")
for(webEle in webEles){
  tryCatch(webEle$clickElement(),error=function(e){print(e)})
}


#this should get the full review, including translation and original text
reviews=read_html(pagesource) %>%
  html_nodes(".review-full-text") %>%
  html_text()

#number of stars
stars <- read_html(pagesource) %>%
  html_node(".review-dialog-list") %>%
  html_nodes("g-review-stars > span") %>%
  html_attr("aria-label")

#time posted
post_time <- read_html(pagesource) %>%
  html_node(".review-dialog-list") %>%
  html_nodes(".dehysf") %>%
  html_text()

#Consolidating everything into a dataframe
reviews=head(reviews,min(length(reviews),length(stars),length(post_time)))
stars=head(stars,min(length(reviews),length(stars),length(post_time))) 
post_time=head(post_time,min(length(reviews),length(stars),length(post_time)))
reviews_df=data.frame(review=reviews,rating=stars,time=post_time)

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

Буду признателен за любые предложения или помощь !!Заранее спасибо.

...