← back to Dw Yolo Loop
.coll-audit.py
82 lines
import json, sys
from playwright.sync_api import sync_playwright
BASE = "https://www.designerwallcoverings.com/collections/"
HANDLES = [
"alligator-skin-wallpaper-collection",
"andrew-martin-wallcoverings",
"animal-print-wallpaper",
"art-nouveau-wallpaper",
"blue-wallcoverings",
"chinoiserie-collection",
"cole-and-son-collections",
"designers-guild-wallpaper",
"grasscloth-wallpaper-collection",
"green-wallcoverings",
"kelly-wearstler-wallpapers-1",
"kids-wallpaper",
"metallic-wallpaper-collection",
"mulberry-wallcoverings",
"red-wallcovering-collection",
]
TILE_SEL = (
".boost-pfs-filter-product-item, [class*='product-item'], .product-card, "
".grid__item .card, li.grid__item, [data-product-id], .product-grid-item, .grid-product"
)
def count_tiles(page):
try:
n = page.locator(TILE_SEL).count()
except Exception:
n = 0
if n == 0:
try:
n = page.locator("a[href*='/products/']").count()
except Exception:
n = 0
return n
results = []
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
ctx = browser.new_context(viewport={"width":1440,"height":900},
user_agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124 Safari/537.36")
for h in HANDLES:
url = BASE + h
rec = {"handle": h, "url": url}
page = ctx.new_page()
try:
page.goto(url, wait_until="domcontentloaded", timeout=45000)
try:
page.wait_for_load_state("networkidle", timeout=15000)
except Exception:
pass
page.wait_for_timeout(1500)
before = count_tiles(page)
rec["tiles_before"] = before
html = page.content()
rec["has_boost"] = ("boost-pfs" in html) or ("boostCommerce" in html) or ("boost_pfs" in html)
rec["has_loadmore_btn"] = page.locator(
"button:has-text('Load More'), a:has-text('Load More'), .boost-pfs-filter-load-more, [class*='load-more'], .load-more").count()
rec["has_pagination"] = page.locator(
"nav.pagination, ul.pagination, .boost-pfs-filter-bottom-pagination, [class*='pagination'], a[href*='?page='], a[href*='&page=']").count()
page.evaluate("window.scrollTo(0, document.body.scrollHeight)")
page.wait_for_timeout(2000)
page.evaluate("window.scrollTo(0, document.body.scrollHeight)")
page.wait_for_timeout(2000)
rec["tiles_after"] = count_tiles(page)
shot = "/tmp/coll-audit/" + h + ".png"
page.screenshot(path=shot, full_page=False)
rec["screenshot"] = shot
rec["title"] = page.title()
except Exception as e:
rec["error"] = str(e)[:200]
results.append(rec)
print(json.dumps(rec)); sys.stdout.flush()
page.close()
browser.close()
open("/tmp/coll-audit/results.json","w").write(json.dumps(results, indent=2))
print("DONE")