Все остальное в Интернете должно скрывать расширение:
- PLP/страницы категорий/результаты поиска
- домашние страницы, редакционные статьи, блоги
- корзина/оформление заказа/аккаунт
- PDP, не относящиеся к одежде (электроника, винты, мебель, красота и т. д.)
Ограничения
- Необходимо запускать на устройстве (без вызовов сервера)
- Макс. классификация за 1 секунду
- Минимальный процессор/память (избегайте сканирования огромного DOM / document.body.innerText)
- Должен работать во многих розничных магазинах, на разных языках и на сайтах SPA (контент загружается после первоначального DOM)
Текущий подход
У меня есть эвристический конвейер:- Обнаружение страниц листинга (PLP) и возврат false
- Определить страницы товаров (PDP) с помощью схемы.org/JSON-LD + добавление в корзину + ценовые сигналы
- Окончательный фильтр: ключевые слова, связанные с одеждой
- Ложные срабатывания на товары, не связанные с одеждой (например, духи, свечи, электроника), поскольку сигналы PDP, такие как цена + добавление в корзину + Schema.org Product, часто встречаются на всех типах страниц товаров.
- Ложные срабатывания из-за соответствия ключевых слов, поскольку при сканировании текста страницы (даже ограниченного) выявляются термины, связанные с одеждой. заголовки/нижние колонтитулы/рекомендации («Завершить внешний вид», «возврат» и т. д.)
Пример упрощенного кода
Код: Выделить всё
function isProductPage() {
// any Product JSON-LD => true (too loose)
const scripts = document.querySelectorAll('script[type="application/ld+json"]');
for (const s of scripts) {
try {
const data = JSON.parse(s.textContent);
if (JSON.stringify(data).includes('"@type":"Product"')) return true;
} catch {}
}
// fallback: add-to-cart button / price regex
return !!document.querySelector('button, input[type="submit"]');
}
function isClothingRelated() {
// currently too broad; sometimes scans body text or large sections
const text = (document.title + " " + document.body.innerText).toLowerCase();
return /shirt|t-shirt|dress|pants|jeans|shoes|sneakers/.test(text);
}
function shouldShowExtension() {
if (isListingPage()) return false;
if (!isProductPage()) return false;
return isClothingRelated();
}
Что я ищу
Я ищу надежную и легкую эвристику (или проверенную миниатюрную модель) для классификации:Конкретно:
- Каков хороший быстрый способ обнаружить PDP по одному продукту и PLP?
структурированные данные (+ предложение против ItemList/Код: Выделить всё
Productи т. д.)Код: Выделить всё
CollectionPage - Сигналы DOM (селектор вариантов, добавление в корзину, цена)
- Шаблоны URL (дешевый ранний фильтр)
- определение селектора размера (XS–XXL, размеры обуви ЕС/США, «один размер»)
- шаблоны вариантов вариантов
- поля категории/productType на Schema.org
[*]Есть какие-нибудь советы по работе с SPA (повторно запускать через MutationObserver без повторного выполнения дорогостоящей работы)?
Если кто-нибудь реализовал подобное «обнаружение типа страницы» в веб-расширении, я был бы признателен за рекомендации или примеры минимального, высокопроизводительного конвейера обнаружения.
Подробнее здесь: https://stackoverflow.com/questions/798 ... -pages-pdp
Мобильная версия