#python #selenium-webdriver #selenium-chromedriver
Вопрос:
Я хочу разработать код, в котором он будет обновлять страницу до тех пор, пока конкретный элемент не будет виден на веб-странице с помощью selenium. Я разработал следующий код, но он выдал мне ошибку.
Ошибка: selenium.общие.исключения.Исключение NoSuchElementException: Сообщение: такого элемента нет: Не удается найти элемент: {«метод»:»текст частичной ссылки»,»селектор»:»КУПИТЬ СЕЙЧАС»}
Код:
while True:
if driver.find_element_by_partial_link_text('BUY NOW'):
break
driver.refresh()
buy = driver.find_element_by_partial_link_text('BUY NOW')
buy.click()
Кто-нибудь может помочь?
Ответ №1:
selenium создает исключения, если ему не удалось найти один элемент. таким образом, ваш цикл (хотя и истинный) не может быть успешным циклом, код «if driver.find_element_by_partial_link_text («КУПИТЬ СЕЙЧАС») » может нарушить сценарий.
есть два способа сделать это:
- используйте ‘WebDriverWait’ для явного ожидания элемента. (предлагаю использовать WebDriverWait) пример:
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
driver = webdriver.Chrome()
wait = WebDriverWait(driver, 30)
wait.until(EC.presence_of_element_located(("partial link text","BUY NOW")))
driver.refresh()
- вместо этого используйте find_elements.
пример:
from selenium.webdriver.common.by import By
while True:
if len(driver.find_elements(By.PARTIAL_LINK_TEXT, 'BUY NOW')) > 0:
break
driver.refresh()
buy = driver.find_element_by_partial_link_text('BUY NOW')
buy.click()
Ответ №2:
Вам следует дать некоторое время, чтобы элемент появился. Попробуйте использовать ожидания:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
while True:
wait = WebDriverWait(driver, 1)
wait.until(EC.element_to_be_clickable(driver.find_element_by_partial_link_text('BUY NOW'))
if driver.find_element_by_partial_link_text('BUY NOW'):
break
driver.refresh()