Что делать, если xpath для ссылки меняется после загрузки несколько раз во время очистки? - PullRequest
0 голосов
/ 28 апреля 2020

Я пытался очистить код после многократного ввода ключевых слов в поле поиска через al oop. При поиске по каждому ключевому слову имеется ссылка Просмотреть все , в которой отображаются соответствующие сообщения. После поиска по 2-3 ключевым словам, xpath для этого тега привязки изменяется, что приводит к разрыву l oop, что приводит к ошибке.

Вот код, который я пытаюсь выполнить:

library(RSelenium)
library(rvest)
library(stringr)
library(xml2)


try(rsDriver(port = 4444L, browser = 'firefox'))
remDr <- remoteDriver()
remDr$open()
remDr$navigate("https://www.linkedin.com/login")

det<-vector()
cat("Enter user id: ");
det[1] <- readLines("stdin",n=1);

user <- remDr$findElement(using = 'id',"username")
user$sendKeysToElement(list(det[1],key="tab"))

cat("Enter pass: ");
det[2] <- readLines("stdin",n=1);


pass <- remDr$findElement(using = 'id',"password")
pass$sendKeysToElement(list(det[2],key="enter"))

ex<-c("mba job","job referral","ca job","mba referral","high paying jobs")

for (b in 1:5) {
  Sys.sleep(10)
  search <- remDr$findElement(using = "xpath",'/html/body/header/div/form/div/div/div/div/div[1]/div/input')
  search$sendKeysToElement(list(ex[b],key="enter"))

 Sys.sleep(10)

  key <- remDr$findElement(using = "xpath",'/html/body/div[5]/div[3]/div[3]/div/div[2]/div/div[2]/div/div/div/div/ul/li[4]/div/div/a')
  key$clickElement()
}

Есть еще много ключевых слов, для простоты дается 5. Переменная key содержит xpath кнопки «видеть все», которая изменяется при поиске «ca jobs». За ним следует мой код для очистки сообщений.

Как решить эту проблему?

1 Ответ

1 голос
/ 29 апреля 2020

Вы должны использовать что-то более общее c, чтобы найти элементы. Для поля поиска:

//input[starts-with(@class,"search-global")]

Для элемента, на который нужно щелкнуть («Просмотреть все»):

//div[contains(@class,"escape-hatch")]

Примечание: вы можете l oop вместо URL вместо используя окно поиска. С помощью paste0 создайте список всех необходимых URL:

urls = paste0("https://www.linkedin.com/search/results/all/?keywords=",vector containing your keywords)

Затем используйте al oop или функцию apply для итерации по этому lis (url [0], url [1], ... ) и очистите содержимое, которое хотите.

...