Нажмите на кнопку, которая каждый раз меняет свой идентификатор - PullRequest
0 голосов
/ 04 декабря 2018

Я работаю с Python и Selenium.Миссия состоит в том, чтобы нажать на кнопку с текстом '+ как' или на столбце 'td' с class = 'профиль-образ '.Но кнопка не имеет идентификатора, и она class 'more-likes' используется в других кнопках.Та же ситуация с div с class 'profile-image-button' (идентификатор класса div используется в других div'ах).Я попытался взять идентификатор 'td' :

button = photos.find('td', class_='profile-image')
print(button.get_id)

Вывод 'None'

Вот HTML-код веб-страницы:

<div id="category7515692" class="category-content" data-content="present" data-collapsing="true">
  <table class="pictures" data-columns-count="12" data-type="gallery">
    <tbody class="" data-selec="7565904" data-name="beauty" data-live="true">
      <tr data-mutable-id="MR1main" class="header">
        <td class="main-row-buttons" rowspan="1" data-mutable-id="Bmain">
          <table>
            <tbody>
              <tr>
                <td class="profile-image" id="view-75634" data-event-more-view="event-more-view" data-selec="7565904" islive="true" isseparatedbutton="false">
                  <div class="profile-image-button">
                    <span class="more-likes">+like</span>
                  </div>
                </td>
              </tr>
            </tbody>
          </table>
        </td>
      </tr>
    </tbody>
  </table>
</div>

Как я могу нажать на кнопку или как я могу получить идентификатор?

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Требуемый элемент является элементом React , поэтому для щелчка по элементу необходимо вызвать WebDriverWait , чтобы элемент был активным , и вы можете использовать любой из следующих элементов:следующие решения:

  • Использование CSS_SELECTOR:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "td.profile-image>div.profile-image-button>span.more-likes"))).click()
    
  • Использование XPATH:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//td[@class='profile-image']//span[@class='more-likes' and contains(.,'+like')]"))).click()
    
  • Примечание : необходимо добавить следующие операции импорта:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
0 голосов
/ 04 декабря 2018

Предполагается, что есть только одна кнопка с текстом '+ like', вы можете искать элемент с определенным текстом, например так:

driver.find_element_by_xpath("//*[contains(text(), '+like')]").click()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...