Селен - Как щелкнуть на элементе, который нельзя щелкнуть - PullRequest
0 голосов
/ 12 февраля 2019

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

До -

<span class='foo', id='bar'>

После -

<span class='foo.active', id='bar'>

Я могу найти элемент, используя find_element_by_class_name и find_element_by_id

Проблема не в том, чтобы найти элемент, а в том, чтобы щелкнуть по ним.

  • Я попытался .click() метод, который не работает, очевидно,
  • Я попытался ActionChains, который выдал ошибку, что

rect не определено.

  • Я пробовал execute_script метод, который не выдает никакой ошибки, но и ничего не меняет.

driver.execute_script("arguments[0].setAttribute('class','foo.active')", element)

Есть ли другой методПРОВЕРИТЬ этот флажок?

Обновление : Я понял, что элемент не отображается, поскольку он выдает ошибку

Сообщение: Элемент не может быть прокручен

Кроме того, element.text возвращает пустую строку.

Когда я вижу веб-страницу в браузере, ничто не блокирует представление.

ЕеЭто код:

<li id='categoryID1' class='categoryBtn list5'>        
<span class="categoryCheckbox"></span>
<span class="categoryLabel">Funny</span>
<div class="reset"></div>
</li>

Я пытался: driver.find_element_by_xpath("//span[contains(text(),'Funny')]")

Выдает эту ошибку:

selenium.common.exceptions.ElementNotInteractableException: Сообщение:Элемент не может быть прокручен до вида

Обновление 2 : Я также понял, что использование метода contains(text()) возвращает элемент, который не отображается.С другой стороны, когда я скопировал XPath из браузера, а затем использовал его, он возвращает элемент, по которому можно щелкнуть.

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Если класс уникален, но динамически изменяется, вам нужно найти и получить частичное статическое значение из этого класса.

В вашем случае вы можете попробовать

xPath = "//span[contains(@class, 'foo')]"
element = driver.find_element_by_xpath(xPath)
element.click()

, и если естьЕсли несколько совпадений, то вы можете использовать соответствующий индексный номер, как показано ниже:

(//span[contains(@class, 'foo')])[Matching index number]

например, если вы получаете совпадение с индексным номером 3, то вы можете сделать, как показано ниже:

xPath = "(//span[contains(@class, 'foo')])[3]"
element = driver.find_element_by_xpath(xPath)
element.click()

Попытайтесь дать некоторую задержку, если элемент присутствует, и если вы получаете какие-либо исключения при нажатии:

from time import sleep

sleep(3)
xPath = "(//span[contains(@class, 'foo')])[3]"
element = driver.find_element_by_xpath(xPath)
element.click()

Я надеюсь, что это поможет ...

0 голосов
/ 12 февраля 2019

Возможно, это поможет:

elem = driver.find_element_by_xpath("[contains(@class, 'foo')]")

elem.click()

elem.send_keys(u'\ue007')  (or elem.send_keys(u'\ue00d') )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...