Python selenium выберите кнопку Dynami c - PullRequest
1 голос
/ 05 августа 2020

Я пытался нажать на кнопку, но мне это не удалось. Исходный код выглядит так:

<div class="sc-fzXfPJ soOmg">
<button type="submit" class="sc-fzXfQu KbRNP SuiButton SuiButton--primary 
   SuiButton--wide">
      <div class="SuiButton-content">
          <div class="SuiButton-label">
               <span class="sc-fzXfNh cnQLcv">
                    <p>LET'S GET IT!</p>

Когда я пробую xpath, он дал мне:

/html/body/div[11]/div/div/div[2]/div/div/div/div/div/form/div[3]/button

и когда я запускаю:

driver.find_element_by_xpath('/html/body/div[11]/div/div/div[2]/div/div/div/div/div/form/div[3]/button').click()

Он возвращает ошибка. Текст кнопки: ПОЛУЧИМ!

Как я могу это исправить?

Ответы [ 4 ]

0 голосов
/ 05 августа 2020

Сказав, что использование абсолютного xpath не является хорошей практикой.

Попробуйте несколько альтернатив:

Использование CSS селектора:

driver.find_element_by_css_selector("button[type='submit']").click()

Использование селектора Xpath:

driver.find_element_by_xpath("//button[@type='submit']").click()

ИЛИ с использованием текста кнопки, что невозможно с помощью селектора CSS:

driver.find_element_by_xpath('//button[contains(.,"LET\'S GET IT!")]').click()

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

wait = WebDriverWait(driver, 20)
wait.until(EC.invisibility_of_element((By.CSS_SELECTOR, "button[type='submit']")))
driver.find_element_by_css_selector("button[type='submit']").click()

Для этого импортируйте следующий пакет:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
0 голосов
/ 05 августа 2020

Это поможет

driver.find_element_by_xpath("//p[contains(text(),'S GET IT!')]").click()
0 голосов
/ 05 августа 2020

Вы можете использовать Xpath с его осями. Чтобы узнать больше об осях, вы можете нажать здесь .

Для вашего разрешения вы можете использовать это Xpath -

//p[contains(text(),"GET IT"]/ancestor::button[@type='submit'].

Использование абсолютного Xpath не является хорошей идеей, так как его легко разбить, и его не следует использовать.

Сообщите мне, если у вас возникнут какие-либо проблемы, разрешение дается на основе кода, которым вы поделились.

0 голосов
/ 05 августа 2020

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...