Найдите гибкий элемент с помощью RSelenium

#r #selenium

Вопрос:

В настоящее время я пытаюсь понять, как щелкнуть по элементу на веб-сайте, который появляется случайным образом. Это рыба, которая появляется в воде. Вода представляет собой таблицу 4х4, где в каждой ячейке есть векторный график рыбы. Когда рыба «появляется», непрозрачность рыбы меняется с «невидимой» на черную и обратно на «невидимую».

У меня есть xpath для ячеек/всей таблицы, но я понятия не имею, как идентифицировать рыбу.

Невидимая рыба:

 <dic class = "col-25 fishcell">
<img src="/img/items/fish.png" class = "fish f41" style= "display: none;">
</div>
 

Видимая рыба:

 <dic class = "col-25 fishcell">
<img src="/img/items/fish.png" class = "fish f41 catch" style= "display: inline; opacity: (1);">
</div>
 

Значение непрозрачности возвращается к 0, и рыба исчезает. Рыба видна примерно секунду или 2.

Как вы можете видеть, класс также меняется с добавлением «улова». До сих пор я работал только со статическими объектами веб-сайта. Теоретически, мой код должен был бы постоянно проверять, не изменяется ли какое-либо из значений в сетке, если обнаружено изменение в имени класса или в стиле, сценарий должен был бы приостановиться, щелкнуть, а затем снова вернуться в цикл.

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

ПРАВКА 1: Я нашел способ идентифицировать видимую рыбу:

 for (i in 1:120) {
  for (x in 1:4) {
    link <- paste("//*[@id="fishinwater"]/div[1]/div[", x, sep = "")
    link <- paste(link,"]/img", sep = "" )
    grid <- remDr$findElement(value = link)
    if (grid$getElementAttribute("style") != "display: none;" ) {
      grid$highlightElement
      print("WE FOUND A FISH")
    }
    }
  Sys.sleep(0.5)
}
 
  • Этот цикл проверяет все сетки на наличие видимых рыб, проверяя атрибут «стиль» файла fish.img. Если это «дисплей:нет», рыбы нет, если она изменится на что-то другое, рыба будет видна.
  • (i в 1:120) — это просто случайное число, которое нужно проверить 120 раз.
  • (x в 1:4) необходимо, потому что каждая строка сетки 4×4 имеет разный путь xpath
  • $выделение и команда печати предназначены только для видимого представления

Сценарий работает до сих пор, но, как упоминал @neuron, я не знаю, очень ли он эффективен (на самом деле я почти уверен, что это не так). Я не знаком с «поддержанием работы», кроме как с помощью цикла. Мы высоко ценим дальнейшую помощь в улучшении кода!

Комментарии:

1. У вас есть какой-нибудь код, чтобы показать нам?

2. Отображение html-кода действительно полезно только в том случае, если вы собирались очистить сайт. Поскольку рыба видна только секунду или две, то скребок для паутины будет крайне неэффективен.

3. Я не r знаю, но я отвечу на этот вопрос в Python-Selenium, дайте мне знать, если вы открыты для этого.

4. Спасибо вам за все ваши ответы, я отредактировал свой пост, потому что у меня появились некоторые идеи (конечно, после того, как я опубликовал сообщение stackoverflow и отложил его на ночь). Я мог бы, наконец, добавить некоторые примеры кода.