#python #html #python-3.x #selenium #web-scraping
Вопрос:
Я написал сценарий, чтобы найти и нажать кнопку, и до сегодняшнего дня он работал нормально. Интересно, что вызывает:
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"button[data-bind="click:selectLocation"]"}
Я попытался добавить time.sleep (), просто чтобы убедиться, что я достаточно долго жду загрузки страницы, но нет, ошибка все равно появляется. Вот html-код кнопки:
<div class="form-group">
<div class="col-xs-12">
<label data-bind="lang:searchSelectLocation">Select a location</label>
<button type="button" class="btn btn-default btn-block text-left" data-bind="click:selectLocation"> <i class="fa fa-fw fa-map-marker-alt" data-bind="css:loadingLocation ? 'fa-spinner fa-spin' : 'fa-map-marker-alt'"></i>amp;nbsp;<!--ko text: location ? location.name : $root.lang('searchSelectLocationOptions') -->Cityname<!--/ko--><i class="fa fa-chevron-right pull-right"></i>
</button>
</div>
</div>
А вот фрагмент кода, который нужно найти и нажать на кнопку:
time.sleep(20)
driver.find_element_by_css_selector('button[data-bind="click:selectLocation"]').click()
time.sleep(20)
P. S Я тоже уже подождал, прежде чем нажать. Извини, что пропустил это.
Комментарии:
1. Вам нужно поспать, прежде чем искать его. время.сон() , затем драйвер.найти()
2. Как уже предлагалось, поставьте любое ожидание, прежде чем нажимать. 200 секунд-это слишком большой тайм-аут
3. У меня тоже есть время.поспать() до этого. Не помогает.
4. @DanMullin Есть еще какие-нибудь предложения?
5. @Jandeer7 Я искал. Я пользуюсь этим . Чистая версия Selenium и успешно использовали функцию «дождаться загрузки». Это в python Selenium? Я вижу, что это основано на ответе. Хммм..
Ответ №1:
Ну, во-первых, вы должны подождать, прежде чем нажать кнопку, а не потом, чтобы убедиться, что она загружена.
Во-вторых, Selenium поставляется с так называемыми явными ожиданиями, которые позволяют вам ждать, пока элемент не станет видимым или доступным для клика.
Так что в вашем случае это выглядело бы так:
max_time_to_wait = 200 # if it doesn't find the element in this timespan, it will throw a TimeoutException
element = WebDriverWait(driver, max_time_to_wait).until(
EC.element_to_be_clickable((By.CSS_SELECTOR, 'button[data-bind="click:selectLocation"]')))
element.click()
Комментарии:
1. Уже было ожидание, прежде чем нажать, но заменено вашим предложением, но все равно появилось исключение после 200 тайм-аута. Очень странно
2. Если вы используете Google Chrome, нажмите Ctrl Shift I, чтобы просмотреть веб-страницу, и после нажатия кнопки Crtl F вы можете ввести свой css-селектор. Кнопка должна быть выделена зеленым цветом, если селектор установлен правильно.
3. Да, я сделал это, и кнопка там и выделена, как и ожидалось. Вот почему это действительно странно
4. Ладно, это действительно очень странно. Это также может быть внутри iframe. Можете ли вы отправить ссылку на веб-сайт?
5. Конечно, мы можем поговорить в чате напрямую? Спасибо