двойной щелчок по элементу с помощью Selenim в Python не работает

Я парсю Tradingview . На этом сайте есть вот такой график:

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

Это код, который я пробовал (это метод внутри класса):

      def change_indicator_settings(self, entry, tp, sl):
    # double click on the indicator
    indicator = self.driver.find_elements(By.CSS_SELECTOR, 'div[data-name="legend-source-item"]')
    print(indicator[0])
    print(indicator[0].get_attribute('class'))
    ActionChains(self.driver).double_click(indicator[0]).perform()

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

Вот HTML-код элемента, который я пытаюсь дважды щелкнуть:

      

<div class="sources-131H9iuA"> 
  <div class="item-131H9iuA last-131H9iuA blockHidden-e6PF69Df"></div>
  <div class="item-131H9iuA study-131H9iuA has5Buttons-131H9iuA withTail-131H9iuA" data-name="legend-source-item"></div> 
  <div class="item-131H9iuA study-131H9iuA disabled-131H9iuA has5Buttons-131H9iuA" data-name="legend-source-item"></div>
</div>

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

2 ответа

Не знаю, почему ваш код не работает, поскольку ваш код кажется в основном правильным, и я не могу найти диаграмму, подобную той, которую вы опубликовали, когда нажимаю ссылку.

Но вы можете попробовать использовать XPath вместо селектора CSS:

      def change_indicator_settings(self, entry, tp, sl):
    indicator = self.driver.find_element('xpath', '//div[@data-name="legend-source-item"]')
    ActionChains(self.driver).double_click(indicator).perform()

Если вашему селектору CSS не удалось найти элементы, метод XPATH найдет элементы.

Если это не сработало, потому что элементы не были найдены, то описанное выше должно работать.

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

      def change_indicator_settings(self, entry, tp, sl):
    indicator = self.driver.find_element('xpath', '(//div[@data-name="legend-source-item"])[2]')
    ActionChains(self.driver).double_click(indicator).perform()

Еслине работает, попробуйте использоватьвместо этого дважды ()

Итак, вам нужно пройти четыре теста. Будьте осторожны, некоторые тесты могут вызвать исключения, поскольку у меня нет доступа к рассматриваемой диаграмме, и я не могу ее протестировать. Но какое бы исключение вы ни встретили, это означает, что метод, вызвавший его, не работает. Просто игнорируйте исключение и используйте другие методы.

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

Кроме того, я немного изменил свой код. Я перешел к этому элементу, прежде чем дважды щелкнуть по нему.

      def change_indicator_settings(self, entry, tp, sl):
    # get the 1st indicator on the top of the chart
    indicators = self.driver.find_elements(By.CSS_SELECTOR, 'div[data-name="legend-source-item"]')

    # move to the element
    ActionChains(self.driver).move_to_element(indicators[0]).perform()

    # double click on it
    ActionChains(self.driver).double_click(indicators[0]).perform()
Другие вопросы по тегам