Мне был назначен проект, который требует, чтобы я взял ввод от пользователя, очистил веб-сайт для этого ввода и сохранил его в базе данных, и, при последующих запросах, переставил все данные, сохраненные в базе данных, используя машинное обучение, предлагая пользователю выбор на основе его поведения в прошлом.
Веб-сайт, который мне нужно почистить, - TripAdvisor.it.
В настоящее время я работаю над частью, касающейся веб-поиска, в частностиЯ работаю над заполнением своей базы данных, получая список достопримечательностей со страницы, и нажимаю на каждое из них отдельно, чтобы сохранить все данные, относящиеся к каждому аттракциону.
Я постоянно получаю сообщение об ошибке "Неизвестная ошибка: элемент не активен в точке (x, y); ..."
Я подумал, что это может быть проблема неполной загрузки javascriptна странице tripadvisor, поэтому я рассмотрел здесь различные возможности стека и попытался добавить явное ожидание, но оно не работает.Другие вещи, которые я пробовал:
- Thread.sleep (1000);Я знаю, что это не очень хорошая практика, особенно в цикле, я просто хотел заставить программу ждать, но она не сработала.Я фактически использовал до 3000 миллисекунд.
- метод, который проверяет, полностью ли загружена js на веб-странице (я адаптировал некоторый код, который я нашел здесь, в stackExchange, так как я не очень хорошо разбираюсь в javascript).Это дало ошибку TimeOut, я не совсем уверен, что это значит.
- с использованием ExpectedCondition
.visibilityOf(WebElement elem);
вместо .elementToBeClickable(WebElement elem);
, так как я понял, что метод .getNumberOfElementsFound(driver, locator)
фактически находит все 30 элементов настр.Я все еще получаю ту же ошибку «Элемент не может быть расположен в (x, y) ...»
Вот код, который выдает исключение:
...
By locator = By.xpath("//a[contains(@class, 'attractions-attraction-overview-main-TopPOIs__name')]");
int numberOfElementsFound = getNumberOfElementsFound(driver, locator);
for (int pos = 0; pos < numberOfElementsFound; pos++) {
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.elementToBeClickable(getElementWithIndex(driver, locator, pos))).click();
...
}
И вот полное сообщение об ошибке:
org.openqa.selenium.WebDriverException: неизвестная ошибка: Элемент ... не активируется в точке (360, 14).Другой элемент получит щелчок: ...
Здесь - это ссылка на фактическую веб-страницу, над которой я работаю, если это поможет.
Правильно ли я оценил, что виновником здесь является javascript?Я пришел к выводу, что это может быть связано с тем, что, когда я ищу этот тег «ui_column wrap_column responseive_inline_hidden label_column» на текущей странице, я не могу его найти.
Что мне следует сделать, чтобы исправить эту ошибку?