Banc d'essai — faux site concurrent

Quatorze fiches produit, servies en HTTP, pour exercer la chaîne complète de la veille tarifaire : page → extraction → normalisation → plausibilité → relevé → alerte → bulletin. Chaque page couvre une forme de balisage ou une panne différente. Rien ici n'est un vrai site : les hôtes *.pw.test ne résolvent que dans le réseau Docker.

Hôtes servisnordis.pw.test (affiche HT) et vartek.pw.test (affiche TTC, TVA 20 %, pour éprouver la normalisation). Depuis le poste : http://localhost:8092/. État : aucun hôte bloqué.

Scénarios

Les pages

PageSélecteur attenduCe qu'elle éprouvePilotage
ak5-600
Panneau AK5 Ø600 sur trépied
css
.product-price .amount
Le cas nominal : CSS, prix HT, format français. C'est la page dont on fait bouger le prix.

ak5-800
Panneau AK5 Ø800 sur trépied
json_ld
offers.price
Données structurées : le barreau le plus fiable de l'échelle, celui qui survit aux refontes.

ak5-1000
Panneau AK5 Ø1000 sur trépied
microdata
itemprop:price
Microdata : deuxième barreau, sur une page qui ne publie pas de JSON-LD.

cone-h500
Cône de chantier H500 classe 2
css
.product-price .amount
Prix injecté en JavaScript : le nœud existe mais il est vide. `http_dom` ne trouve rien, Playwright oui — c'est l'escalade de méthode.

promotion sans objet ici
barriere-vauban
Barrière Vauban 2 m galvanisée
css
.product-price .amount
Séparateurs anglais (« 1,234.56 ») : le piège du facteur 1000 qui a fait partir de faux e-mails côté PrestaShop.

tri-flash-led
Triflash LED rechargeable
xpath
//table[@id="specs"]//tr[2]/td[2]
Aucune classe exploitable : seul un XPath positionnel tient. Donc le sélecteur le plus fragile du lot.

gilet-hv-jaune
Gilet haute visibilité jaune
css
.product-price .amount
Deux prix dans le même bloc (barré + promo). Le sélecteur naïf lit le mauvais : une hausse fantôme, sans aucune erreur technique. Le bon sélecteur est `.product-price .amount.current`.

panneau-b21
Panneau B21 — référence retirée
css
.product-price .amount
Page en 200 mais sans prix (produit retiré du catalogue d'en face) : `selector_miss`, à distinguer d'une page cassée.

promotion sans objet ici
kit-chantier
Kit signalisation chantier complet
css
.product-price .amount
Deuxième page CSS : c'est celle qu'on met en `slow` ou en `500` sans perdre le cas nominal.

masque-fpp2
Masque FFP2 — boîte de 20
css
.product-price .amount.current
PIÈGE : « Prix conseillé : 39,90 € » est une mention de gabarit, écrite sur toutes les fiches du site et jamais retirée. Ce n'est pas une remise — aucune pastille ne doit s'allumer.

promotion sans objet ici
enrouleur-30m
Enrouleur de câble 30 m HO7RN-F
json_ld
offers.price
PIÈGE : `priceValidUntil` à plus d'un an. Google Merchant exige le champ, les gabarits le remplissent d'une date glissante — le lire comme une promotion mettrait tout le domaine en promotion permanente.

promotion sans objet ici
chariot-atelier
Chariot d'atelier 3 plateaux
json_ld
offers.price
PIÈGE : la fiche n'est pas en promotion, mais le `@graph` porte un produit recommandé qui l'est. L'indice doit rester ancré sur l'offre qui a fourni le prix retenu.

promotion sans objet ici
lot-cones-10
Lot de 10 cônes de chantier
json_ld
offers.lowPrice
PIÈGE : `AggregateOffer` à 129,00 €–189,00 €. Le `highPrice` est la déclinaison la plus chère, jamais un prix barré — le lire comme prix de référence inventerait une remise de 32 %.

promotion sans objet ici
sel-sac-25kg
Sel de déneigement — sac de 25 kg
css
.product-price .amount
Le cas d'origine (alerte 88) : eux le sac de 25 kg, nous le lot de 4 sacs. Écart brut −75 %, donc « prix invraisemblable » à chaque campagne — sur un relevé parfaitement juste. Se règle par 25 kg → 100 kg.

degraissant-fut-20l
Dégraissant atelier — fût de 20 L
css
.product-price .amount
Le sens INVERSE, et le plus dangereux : eux le fût de 20 L, nous le bidon de 5 L. Le concurrent paraît 3× plus cher, donc AUCUNE alerte ne se lève — le classement marché est faux en silence, et une occasion de hausse peut s'y appuyer.

vis-inox-boite-100
Vis inox A2 5×40 — boîte de 100
css
.product-price .amount
Vente par MULTIPLE de notre côté : eux la boîte de 100, nous la vis à l'unité par paquets de 10. Notre prix gouverne une pièce, le sien une boîte.

gants-carton-120
Gants nitrile T9 — carton de 120 paires
css
.product-price .amount
Quantité MINIMALE de notre côté : eux le carton de 120 paires, nous la paire avec un minimum de 12. Le minimum ne change pas le prix unitaire — donc l'équivalence est 120 → 1, et le minimum n'entre pas dans le calcul. Piège à ne pas confondre.

cable-hv-au-metre
Câble HO7RN-F 3G2.5 — au mètre
css
.product-price .amount
NON CONVERTIBLE : eux au mètre, nous à la couronne vendue au kilogramme. Aucun rapport n'existe entre m et kg — le dialogue doit REFUSER et proposer d'archiver le lien, pas souligner un champ en rouge.

balise-k5c
Balise K5c rétroréfléchissante
css
.product-price .amount
Lue sous l'hôte TTC (`vartek.pw.test`) : le prix affiché est TTC, la normalisation doit le ramener en HT.

Qui est passé (25 dernières requêtes)

HeureHôtePageStatutUser-Agent
09:59:33pwsite-mr-359.review.prozon.comcable-hv-au-metre200Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, l
09:59:33pwsite-mr-359.review.prozon.comgants-carton-120200Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, l
09:59:33pwsite-mr-359.review.prozon.combalise-k5c200Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, l
09:59:33pwsite-mr-359.review.prozon.comvis-inox-boite-100200Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, l
09:59:33pwsite-mr-359.review.prozon.comdegraissant-fut-20l200Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, l
09:59:33pwsite-mr-359.review.prozon.comsel-sac-25kg200Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, l
09:59:33pwsite-mr-359.review.prozon.comlot-cones-10200Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, l
09:59:33pwsite-mr-359.review.prozon.comchariot-atelier200Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, l
09:59:33pwsite-mr-359.review.prozon.comenrouleur-30m200Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, l
09:59:33pwsite-mr-359.review.prozon.commasque-fpp2200Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, l
09:59:33pwsite-mr-359.review.prozon.comkit-chantier200Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, l
09:59:33pwsite-mr-359.review.prozon.companneau-b21200Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, l
09:59:33pwsite-mr-359.review.prozon.combarriere-vauban200Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, l
09:59:33pwsite-mr-359.review.prozon.comgilet-hv-jaune200Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, l
09:59:33pwsite-mr-359.review.prozon.comtri-flash-led200Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, l