Получить конкретную часть querySelector(x).Внутренний текст

#javascript #puppeteer

Вопрос:

Поэтому я пытаюсь автоматизировать задачу в Puppeteer, и одна из вещей, которую я хочу сделать, заключается в том, чтобы получить время в виде текста. Я нашел оригинальный способ слишком сложным, поэтому выбрал этот метод, так как дата и время уже есть, просто нужно изолировать время.

Запустите это в веб-консоли:

 document.querySelector('div[class="h1 text-success"]').innerText;
 

это дает мне это (на этот раз, в следующий раз, когда я пройду процесс, он покажет другое время, если я заполню форму и обновлю время).

 'Tuesday, October 19, 2021 5:48 PM'
 

Вопрос: Есть ли какой-либо способ специально изолировать часть 5:48 вечера, независимо от того, что произойдет раньше времени?

РЕДАКТИРОВАТЬ: Два опубликованных метода действительно работают (технически, предполагая, что вы сами вводите их в веб-консоль.), но у Кукольника возникли проблемы (или я просто понятия не имею, как это реализовать в Кукольнике, вероятно, последнее).

Обновление 2 (потому что я почему-то не мог быстро соединить 1 и 1): вместо объявления константы TimeRX я просто удалил ее и просто заменил регулярное выражение TimeRX. Вот чем закончилась эта строка:

 const time = await page.evaluate(()=>document.querySelector("div.h1.text-success").textContent.match(/d{1,2}:d{2} (AM|PM)/i)?.[0]);
 

Я, вероятно, в конечном итоге изменю регулярное выражение на другое рекомендованное.

Комментарии:

1. «неважно, что произойдет раньше времени» … что, если существует несколько временных моделей?

2. @Phil для уточнения, так как кажется, что это очень необходимо. это было точно так же уже около месяца назад. поэтому я не понимаю, почему это изменится, и если это действительно изменится, это будет довольно незначительное изменение, такое как удаление точки с запятой после «PM», как они сделали когда-то в прошлом месяце.

Ответ №1:

Запечатлеть его с помощью регулярного выражения?

 const twelveHourTimeRx = /(1[0-2]|(?<!d)[1-9]):[0-5]d ?(AM|PM)/i
// or the much simpler but less valid /d{1,2}:d{2} (AM|PM)/i

const time = document.querySelector("div.h1.text-success")
  .textContent.match(twelveHourTimeRx)?.[0]
  
console.log("time", time) 
 <div class="h1 text-success">
  Tuesday, October 19, 2021 5:48 PM
</div> 

Обратите внимание, что я использовал гораздо более снисходительный селектор, чтобы найти ваш <div> . Ваш исходный требует class , чтобы атрибут был точным "h1 text-success" , но использование .h1.text-success означает, что могут быть другие классы и в любом порядке.

Ответ №2:

Вы можете разделить строку пробелом и получить два последних элемента:

 const str = document.querySelector('.h1.text-success').textContent
const res = str.split(' ').slice(-2).join(' ')

console.log(res) 
 <div class="h1 text-success">Tuesday, October 19, 2021 5:48 PM</div>