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.
nordis.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é.
| Page | Sélecteur attendu | Ce qu'elle éprouve | Pilotage |
|---|---|---|---|
ak5-600Panneau 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-800Panneau AK5 Ø800 sur trépied |
json_ldoffers.price |
Données structurées : le barreau le plus fiable de l'échelle, celui qui survit aux refontes. |
|
ak5-1000Panneau AK5 Ø1000 sur trépied |
microdataitemprop:price |
Microdata : deuxième barreau, sur une page qui ne publie pas de JSON-LD. |
|
cone-h500Cô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-vaubanBarriè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-ledTriflash 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-jauneGilet 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-b21Panneau 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-chantierKit 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-fpp2Masque 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-30mEnrouleur de câble 30 m HO7RN-F |
json_ldoffers.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-atelierChariot d'atelier 3 plateaux |
json_ldoffers.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-10Lot de 10 cônes de chantier |
json_ldoffers.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-25kgSel 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-20lDé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-100Vis 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-120Gants 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-metreCâ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-k5cBalise 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. |
|
| Heure | Hôte | Page | Statut | User-Agent |
|---|---|---|---|---|
| 09:59:33 | pwsite-mr-359.review.prozon.com | cable-hv-au-metre | 200 | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, l |
| 09:59:33 | pwsite-mr-359.review.prozon.com | gants-carton-120 | 200 | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, l |
| 09:59:33 | pwsite-mr-359.review.prozon.com | balise-k5c | 200 | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, l |
| 09:59:33 | pwsite-mr-359.review.prozon.com | vis-inox-boite-100 | 200 | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, l |
| 09:59:33 | pwsite-mr-359.review.prozon.com | degraissant-fut-20l | 200 | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, l |
| 09:59:33 | pwsite-mr-359.review.prozon.com | sel-sac-25kg | 200 | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, l |
| 09:59:33 | pwsite-mr-359.review.prozon.com | lot-cones-10 | 200 | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, l |
| 09:59:33 | pwsite-mr-359.review.prozon.com | chariot-atelier | 200 | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, l |
| 09:59:33 | pwsite-mr-359.review.prozon.com | enrouleur-30m | 200 | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, l |
| 09:59:33 | pwsite-mr-359.review.prozon.com | masque-fpp2 | 200 | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, l |
| 09:59:33 | pwsite-mr-359.review.prozon.com | kit-chantier | 200 | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, l |
| 09:59:33 | pwsite-mr-359.review.prozon.com | panneau-b21 | 200 | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, l |
| 09:59:33 | pwsite-mr-359.review.prozon.com | barriere-vauban | 200 | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, l |
| 09:59:33 | pwsite-mr-359.review.prozon.com | gilet-hv-jaune | 200 | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, l |
| 09:59:33 | pwsite-mr-359.review.prozon.com | tri-flash-led | 200 | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, l |