Не могу нажать на кнопку с помощью selenium: Other element would receive the click

523 просмотра
0
0 Комментариев

Имеется сайт такого вида

введите сюда описание изображения

Вверху видно кнопки, на которые у меня не получается нажать

Вот сам код

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
 
driver = webdriver.Chrome()
driver.get('https://coinmarketcap.com/currencies/bitcoin/#charts')
driver.find_element_by_class_name('highcharts-button highcharts-button-normal').click()
driver.save_screenshot('screencoin.jpg')
driver.quit()

Вот сам код этой кнопки взятый из сайта

<g class="highcharts-button highcharts-button-normal" style="cursor:pointer;" transform="translate(122,0)"><rect fill="#f7f7f7" class=" highcharts-button-box" x="0" y="0" width="32" height="22" rx="2" ry="2"></rect><text x="8.4296875" style="font-weight:normal;color:#333333;fill:#333333;" y="14">1d</text></g>

Пытался еще подставить другой класс

driver.find_element_by_class_name('highcharts-button-box').click()

В итоге получаю вот такие ошибки

Traceback (most recent call last):
  File "crypto.py", line 6, in <module>
    driver.find_element_by_class_name('highcharts-button highcharts-button-normal').click()
  File "/Users/milkiweed/Desktop/VIRTUAL_ENV/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 555, in find_element_by_class_name
    return self.find_element(by=By.CLASS_NAME, value=name)
  File "/Users/milkiweed/Desktop/VIRTUAL_ENV/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 955, in find_element
    'value': value})['value']
  File "/Users/milkiweed/Desktop/VIRTUAL_ENV/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 312, in execute
    self.error_handler.check_response(response)
  File "/Users/milkiweed/Desktop/VIRTUAL_ENV/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py", line 237, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.InvalidSelectorException: Message: invalid selector: Compound class names not permitted
  (Session info: chrome=63.0.3239.132)
  (Driver info: chromedriver=2.35.528157 (4429ca2590d6988c0745c24c8858745aaaec01ef),platform=Mac OS X 10.12.6 x86_64

и еще одну на другую попытку

Traceback (most recent call last):
  File "crypto.py", line 6, in <module>
    driver.find_element_by_class_name(' highcharts-button-box').click()
  File "/Users/milkiweed/Desktop/VIRTUAL_ENV/lib/python3.6/site-packages/selenium/webdriver/remote/webelement.py", line 80, in click
    self._execute(Command.CLICK_ELEMENT)
  File "/Users/milkiweed/Desktop/VIRTUAL_ENV/lib/python3.6/site-packages/selenium/webdriver/remote/webelement.py", line 628, in _execute
    return self._parent.execute(command, params)
  File "/Users/milkiweed/Desktop/VIRTUAL_ENV/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 312, in execute
    self.error_handler.check_response(response)
  File "/Users/milkiweed/Desktop/VIRTUAL_ENV/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py", line 237, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: Element <rect fill="#f7f7f7" class=" highcharts-button-box" x="0" y="0" width="32" height="22" rx="2" ry="2"></rect> is not clickable at point (153, 64). Other element would receive the click: <text x="8.4296875" style="font-weight:normal;color:#333333;fill:#333333;" y="14">...</text>
  (Session info: chrome=63.0.3239.132)
  (Driver info: chromedriver=2.35.528157 (4429ca2590d6988c0745c24c8858745aaaec01ef),platform=Mac OS X 10.12.6 x86_64)

Требуется нажать на эту кнопку введите сюда описание изображения


Добавить комментарий

2 Answers

Python Опубликовано 18.12.2018
0

Во-первых, я бы предложил сделать assert на то, что кнопка есть и находится в кликабельном состоянии, а во-вторых, никогда не стоит искать по классу, если только этот класс не один-разъединственный вот специально для этого элемента. Нужно искать по наиболее уникальным параметрам. В данном случае, я бы обратил внимание на text. В крайнем случае, в отдельной переменной укажите x-path (либо css-селектор, если больше нравится) кнопки и уже через него ищите ее и кликайте.

Добавить комментарий
0

Первая ваша ошибка Compound class names not permitted говорит о том, что искать методом find_element_by_class_name() можно только элементы с одним классом. У вас их два: class="highcharts-button highcharts-button-normal". Чтобы искать такие элементы пользуйтесь поиском по css селекторам или xpath.

Вторая ошибка Element <...> is not clickable at point (153, 64). Other element would receive the click говорит о том, что эелемент перекрыт другим. По перекрытым эелементам хромдрайвер не разрешает кликать.

Попробуйте кликнуть по элементу text. Приведу пример, но не ручаюсь, что мой xpath будет работать всегда, так как нужно видеть весь DOM, чтобы составить оптимальный.

driver.find_element_by_xpath(
    '//g[@class="highcharts-button highcharts-button-normal"]/text[text()="1d"]'
).click()

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up