#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>