как получить несколько ссылок под тегом класса, HTML содержит несколько тегов нескольких классов = "blog-item-wrap", каждый тег содержит тег. нужно получить все ссылки href под тегом класса
<div class = "blog-item-wrap">
<a href = "https://website.com/data-wrangling-with/" title = "Data
Wrangling with JavaScript">
</a>
</div>
<div .... >
<div class = "blog-item-wrap">
<a href = "https://website.com/data-wrangling-with/" title = "Data
Wrangling with JavaScript">
</a>
</div>
</div>
используя это и получаю ошибку:
StaleElementReferenceError: stale element reference: element is not attached to the page document
browser.findElement(By.xpath('//*[@class = "blog-item-wrap"]/a')).then(res => { res.getText().then(text => { console.info('text', text); }).catch(err => { console.info('err', err); });
Основываясь на этом ответе: stackoverflow.com/questions/5543724/… вы должны использовать XPATH //div[contains(@class, 'ui-autocomplete')]/a
browser.findElement (By.xpath ('// * [@ class = "blog-item-wrap"] / a')). then (res => {console.info (res); res.getText (). then (текст => {console.info ('текст', текст);}). catch (err => {console.info ('err', err);});
пытаюсь это сделать, но получаю ошибку UnhandledPromiseRejectionWarning: StaleElementReferenceError: ссылка на устаревший элемент: элемент не прикреплен к странице документа



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы должны использовать getAttribute("href") на всех элементах с driver.findElements(By.xpath('//*[@class = "blog-item-wrap"]/a')).
Затем просмотрите список с помощью getAttribute("href").
вам стоит подумать об использовании async ...
Надеюсь, это вам поможет!
братан, я новенький, ты можешь объяснить мне, пожалуйста, в формате кода?
browser.findElement (By.xpath ('// * [@ class = "blog-item-wrap"] // a')). then (res => {res.getAttribute ("href") .then ( text => {console.info ('text:', text)}) дайте мне одну ссылку, расскажите, пожалуйста, как получить все ссылки Спасибо
Просто замените browser.findElement на browser.findElements
Ошибка возникает из-за того, что элемент, удаленный или измененный со страницы, пытается использовать Promise и использовать findElements() для получения всех элементов.
browser.get('https://..........')
.then(() => {
browser.findElements(By.xpath('//*[@class = "blog-item-wrap"]//a'))
.then(res => {
var links = res.map(aTags => aTags.getText()) // .getAttribute("href")
Promise.all(links).then(texts => {
texts.forEach(text => console.info('text: ', text))
})
})
.catch(err => {
console.info('err: ', err);
});
})
Не Promise
browser.get('https://....')
.then(() => {
browser.findElements(By.xpath('//*[@class = "blog-item-wrap"]//a'))
.then(res => {
res.forEach(aTags => {
aTags.getText()
//aTags.getAttribute("href")
.then(text => console.info('text: ', text))
.catch(err => console.info('err: ', err))
})
})
})
res = WebElement {driver_: thenableWebDriverProxy, id_: Promise} driver_: thenableWebDriverProxy {session_: Promise, executor_: Executor, fileDetector_: null,…} id_: Promise {resolved} should: Proxy прото: Object {constructor:, getIdriver:, getIdriver: :,…} Res.map не является ошибкой функции
могу я узнать URL страницы
он работает найти, за исключением того, что в xpath необходимо изменить /a на //a и убедиться, что вы используете последние версии chromedriver и Chrome
использование не Promise также возвращает ожидаемый результат, см. отредактированный ответ. Думаю, проблема в старой версии приложений.
UnhandledPromiseRejectionWarning: TypeError: res.forEach не является функцией
res находится в форме обещания, а не массива
вы используете последние версии chromedriver и Chrome? также рассмотрите возможность обновления nodejs
последняя версия chromedriver, я обновлю хром и узел
@AtiqUrRehman, значит, вы последовали моему предложению обновить Chrome?
Как ты пробовал? Поделитесь своим кодом и журналом исключений