#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 и отложил его на ночь). Я мог бы, наконец, добавить некоторые примеры кода.