Код позволяющий находить xpath к кнопке заявки и к полям ввода данных в popup окне

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from webdriver_manager.chrome import ChromeDriverManager
import time

# Setup Selenium WebDriver
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.maximize_window()

# URL of the website
url = "https://akkmir-service.ru/"

# Open the website
driver.get(url)

# Initialize WebDriverWait
wait = WebDriverWait(driver, 15)

# Wait for the buttons to be visible and clickable
buttons = wait.until(EC.visibility_of_element_located((By.XPATH, "//a[contains(text(), 'Записаться')]")))

# Variables to store the XPaths
clicked_button_xpath = ""
name_field_xpath = ""
phone_field_xpath = ""

# Click the first button and save its XPath
if buttons:
    # Get XPath of the first button
    clicked_button_xpath = driver.execute_script(
        """
        function getElementXPath(element) {
            if (element.id !== "") return 'id("' + element.id + '")';
            if (element === document.body) return element.tagName;

            var ix = 0;
            var siblings = element.parentNode.childNodes;
            for (var i = 0; i < siblings.length; i++) {
                var sibling = siblings[i];
                if (sibling === element)
                    return getElementXPath(element.parentNode) + '/' + element.tagName + '[' + (ix + 1) + ']';
                if (sibling.nodeType === 1 && sibling.tagName === element.tagName)
                    ix++;
            }
        }
        return getElementXPath(arguments[0]);
        """, buttons)

    # Клик по первой кнопке
    buttons.click()

    # Ожидание появления полей ввода
    wait.until(EC.visibility_of_element_located((By.XPATH, "//input[@placeholder='Введите имя']")))
    wait.until(EC.visibility_of_element_located((By.XPATH, "//input[@placeholder='(999) 999-99-99']")))

    # Найти поля ввода
    name_field = driver.find_element(By.XPATH, "//input[@placeholder='Введите имя']")
    phone_field = driver.find_element(By.XPATH, "//input[@placeholder='(999)999-99-99']")

    # Получение XPath полей ввода
    name_field_xpath = driver.execute_script("return getElementXPath(arguments[0]);", name_field)
    phone_field_xpath = driver.execute_script("return getElementXPath(arguments[0]);", phone_field)
    # Wait for 10 seconds after clicking
    time.sleep(10)

# Close the browser
driver.quit()

# Print XPaths
print(f"Кнопка: {clicked_button_xpath}")
print(f"Поле имя: {name_field_xpath}")
print(f"Поле номер: {phone_field_xpath}")

код по идее должен заходить на сайт находить кнопку 'Записаться' далее кликает по кнопке и в всплывшем popup окне находит поля ввода данных имени и телефона и далее выводит на print xpath пути к кнопке и полям ввода но выдает ошибку: Traceback (most recent call last): File "/home/admin/PycharmProjects/pythonProject/venv/task5/findXPATH.py", line 56, in wait.until(EC.visibility_of_element_located((By.XPATH, "//input[@placeholder='Введите имя']"))) File "/home/admin/PycharmProjects/pythonProject/venv/lib/python3.10/site-packages/selenium/webdriver/support/wait.py", line 101, in until raise TimeoutException(message, screen, stacktrace) selenium.common.exceptions.TimeoutException: Message: я понимаю что можно просто в ручную найти xpath, но мне поставили задачу сдела


Ответы (0 шт):