Я пытаюсь написать программу, которая:
1) вводит имя в строке поиска
2) пресса вводят
3) находит первый результат поиска, который является ссылкой на другую страницу
4) щелкает первый результат
5) находит указанный элемент на результирующей странице
6) копирует этот элемент
7) печатает этот элемент в PyCharm
8) Повторяется для каждой записи в предварительно загруженном массиве (устанавливается в «имена»)
Ниже приведена часть кода, предназначенная для этого.
from selenium import webdriver
import time
import xlrd
driver = webdriver.Chrome("path")
i=0
while i < len(names):
a = names[i]
driver.set_page_load_timeout(25)
driver.get("https://www.healthgrades.com/")
driver.find_element_by_id("search-term-selector-child").send_keys(a)
driver.find_element_by_id("search-term-selector-
child").send_keys(u'\ue007')
driver.implicitly_wait(20)
first = driver.find_element_by_class_name('uCard__name')
first.click()
driver.implicitly_wait(20)
elem= driver.find_element_by_class_name("office-street1")
entry1 = elem.text
time.sleep(1)
print(entry1)
i += 1
Когда я запускаю программу, похоже, что код завершает шаг 4 (строка 13), прежде чем элемент на этом шаге становится ссылкой; чаще всего получаю ошибку
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"class name","selector":"office-street1"}
Я думаю, это означает, что он проходит через find_element_by_class_name и выполняет щелчок. Но когда я смотрю автоматизированную веб-страницу, я замечаю, что следующая страница никогда не открывается.
Чтобы это исправить, я попытался установить неявное ожидание (строка 15) перед поиском элемента uCard, но все равно получаю ту же ошибку.
Другие попытки решения:
Использование явного ожидания для ожидания элемента uCard_name
Очистка кэша / удаление истории поиска с каждым циклом
Использование WebDriverWait для остановки программы
Дополнительная информация: