Задать вопрос

Как заполнить форму python, selenium?

Есть сайт: ссылка удалена модератором. на нем есть форма для ввода имени и почты. Все бы ничего, но эта форма что-ли динамическая, потому что, когда я пытаюсь искать элемент для ввода имени/почты:
driver.find_element(By.XPATH, '//*[@id="firstname"]')


выдает ошибку, которая говорит о том, что элемент не найден:
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id="firstname"]"}
  (Session info: chrome=110.0.5481.180)
Stacktrace:
Backtrace:
	(No symbol) [0x00E737D3]
	(No symbol) [0x00E08B81]
	(No symbol) [0x00D0B36D]
	(No symbol) [0x00D3D382]
	(No symbol) [0x00D3D4BB]
	(No symbol) [0x00D73302]
	(No symbol) [0x00D5B464]
	(No symbol) [0x00D71215]
	(No symbol) [0x00D5B216]
	(No symbol) [0x00D30D97]
	(No symbol) [0x00D3253D]
	GetHandleVerifier [0x010EABF2+2510930]
	GetHandleVerifier [0x01118EC1+2700065]
	GetHandleVerifier [0x0111C86C+2714828]
	GetHandleVerifier [0x00F23480+645344]
	(No symbol) [0x00E10FD2]
	(No symbol) [0x00E16C68]
	(No symbol) [0x00E16D4B]
	(No symbol) [0x00E20D6B]
	BaseThreadInitThunk [0x76027D69+25]
	RtlInitializeExceptionChain [0x77AEBB9B+107]
	RtlClearBits [0x77AEBB1F+191]


Process finished with exit code 1


Пробовал решить проблему через time.sleep(), но сколько бы я не выставлял времени для сна, не помогало.

код:
import time
from selenium import webdriver
from fake_useragent import UserAgent
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By


ua = UserAgent()
url = "https://www.nealthy.com/alpha"

options = webdriver.ChromeOptions()
options.add_argument(f'user-agent={ua.chrome}')

web_driver = Service('C:\\webdriver\\chromedriver.exe')  #ПУТЬ К ВЕБ ДРАЙВЕРУ
driver = webdriver.Chrome(service=web_driver, options=options)

driver.get(url=url)
time.sleep(10)
driver.find_element(By.XPATH, '//*[@id="firstname"]').send_keys('Mikhail')
  • Вопрос задан
  • 214 просмотров
Подписаться 3 Средний 4 комментария
Решения вопроса 1
Добрый день. У вас возникли проблемы потому что на сайте используется Shadow DOM.
Скриншот фрагмента кода удалён модератором.

Как работать с Shadow DOM в различных версиях Selenium можете прочитать например в этой статье на хабре.
Если используйте актуальные версии, то ваш код может быть модифицирован таким образом
from selenium import webdriver
from fake_useragent import UserAgent
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By


ua = UserAgent()
url = "https://www.nealthy.com/alpha"

options = webdriver.ChromeOptions()
options.add_argument(f'user-agent={ua.chrome}')

web_driver = Service('C:\\webdriver\\chromedriver.exe')  #ПУТЬ К ВЕБ ДРАЙВЕРУ
driver = webdriver.Chrome(service=web_driver, options=options)

driver.get(url=url)

# Выше приведен ваш код, изменения начинаются здесь
shadow_host = driver.find_element(By.XPATH, '//form-widget')
shadow_root = shadow_host.shadow_root
shadow_content = shadow_root.find_element(By.CSS_SELECTOR, '#firstname')
shadow_content.send_keys('Mikhail')

Еще обратите внимание, что в Shadow DOM лучше искать локатор по CSS селектору, иначе можно наткнуться на баги Selenium.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы