Как идентифицировать элемент через имя класса, даже если есть несколько элементов с одинаковыми именами классов, используя Selenium и Python

<div class="_2S1VP copyable-text selectable-text" data-tab="1" dir="ltr" spellcheck="true" contenteditable="true"></div>

<div class="_2S1VP copyable-text selectable-text" data-tab="3" dir="ltr" contenteditable="true"></div>

Я новичок, и мне было трудно отличить / указать первый класс от второго

typing = bot.find_element_by_xpath('//div[@class = "_1Plpp"]')

это, похоже, не работает, и просто использование имени класса всегда вызывает нежелательный второй с тем же именем класса, я заметил, что у него есть data-tab="3", а у другого - data-tab="1"как мне указать один с data-tab =" 1 "поверх другого.

2 ответа

Решение

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

Чтобы идентифицировать первый элемент, вы можете использовать любую из следующих стратегий локатора:

  • С помощью css_selectorвместе с атрибутом вкладки данных:

    typing = bot.find_element_by_css_selector("div.copyable-text.selectable-text[data-tab='1']")
    
  • С помощью xpathвместе с атрибутом вкладки данных:

    typing = bot.find_element_by_xpath("//div[contains(@class, 'copyable-text') and @data-tab='1']")
    
  • С помощью xpathвместе с атрибутом вкладки данных:

    typing = bot.find_element_by_xpath("//div[contains(@class, 'selectable-text') and @data-tab='1']")
    

Для простейшего использования (поскольку вы новичок) загрузите страницу в браузере, а затем выберите div и скопируйте full xpath что выглядит примерно так /html/body/div[3]/div[2]/div/div[1]/div[3]/div[3]/form/div[1]/div[1]/div/div[1]/ul/li[18]это может решить вашу проблему. Надеюсь, что это поможет вам!

Другие вопросы по тегам