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

Как мне сделать чтобы у меня работал поиск по xpath?

from selenium import webdriver
import time

options = webdriver.ChromeOptions()
#открытие браузера во всю ширину экрана 
options.add_argument("--start-maximized")

driver = webdriver.Chrome(
    executable_path="", 
    options=options
)

try:
    driver.get("https://rick-i-morty.online")
    time.sleep(5)

    play_all = driver.find_element_by_id("menu-item-3").click()
    time.sleep(5)
    episode = driver.find_element_by_xpath('//a[contains(@href,"https://rick-i-morty.online/episodes/3sez-1seriya161")]').click()
    time.sleep(10)
    play = driver.find_element_by_xpath('//*[@id="vpaid-but"]').click()
    time.sleep(10)
except Exception as ex:
    print(ex)
finally:
    driver.close()
    driver.quit()

консоль

driver = webdriver.Chrome(

DevTools listening on ws://127.0.0.1:65171/devtools/browser/9f860c67-0f1...
[28284:4988:1106/214646.242:ERROR:chrome_browser_main_extra_parts_metrics.cc(230)] crbug.com/1216328: Checking Bluetooth availability started. Please report if there is no report that this ends.
[28284:4988:1106/214646.243:ERROR:chrome_browser_main_extra_parts_metrics.cc(233)] crbug.com/1216328: Checking Bluetooth availability ended.
[28284:4988:1106/214646.243:ERROR:chrome_browser_main_extra_parts_metrics.cc(236)] crbug.com/1216328: Checking default browser status started. Please report if there is no report that this ends.
[28284:4988:1106/214646.246:ERROR:chrome_browser_main_extra_parts_metrics.cc(240)] crbug.com/1216328: Checking default browser status ended.
[28284:23308:1106/214646.247:ERROR:device_event_log_impl.cc(214)] [21:46:46.247] Bluetooth: bluetooth_adapter_winrt.cc:1073 Getting Default Adapter failed.
c:\Users\maksg\Desktop\selenium\selenium_headless_mode.py:18: DeprecationWarning: find_element_by_* commands are deprecated. Please use find_element() instead
play_all = driver.find_element_by_id("menu-item-3").click()
c:\Users\maksg\Desktop\selenium\selenium_headless_mode.py:20: DeprecationWarning: find_element_by_* commands are deprecated. Please use find_element() instead
episode = driver.find_element_by_xpath('//a[contains(@href,"https://rick-i-morty.online/episodes/3sez-1seriya161")]').click()
c:\Users\maksg\Desktop\selenium\selenium_headless_mode.py:22: DeprecationWarning: find_element_by_* commands are deprecated. Please use find_element() instead
play = driver.find_element_by_xpath('//*[@id="vpaid-but"]').click()
Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id="vpaid-but"]"}
  • Вопрос задан
  • 535 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
Возможно, элемент не прогружается к моменту его поиска.
Попробуйте добавить после определения driver строку driver.implicitly_wait(15)
это заставит selenium пробовать найти и тыкнуть в ссылку в течение 15 секунд (не ждать, а именно периодически пробовать).
Также убедитесь, что этот элемент, который вы пытаетесь жмакнуть, в этот момент виден в браузере selenium-а; возможно, надо предварительно поскроллить.

вдогонку
Также, если вы не собираетесь серьезно работать с selenium в продакшене, а делаете наколенный проектик для потыкать в кнопки на сайте, то можно попробовать обертки над selenium, сильно упрощающие его синтаксис (например, elementium). В нем, к примеру, у поиска есть метод wait, с ним удобнее.
Ответ написан
Ваш ответ на вопрос

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

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