From ef243cceff7c80b76327fc159255368dc6e276b3 Mon Sep 17 00:00:00 2001 From: MIEM DEV Date: Fri, 30 Oct 2026 19:28:28 +0300 Subject: [PATCH] fix: ignore hidden book preview controls --- lib/browser.ts | 2 +- tests/browser.security.ts | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/browser.ts b/lib/browser.ts index d34846d..75bc6e8 100644 --- a/lib/browser.ts +++ b/lib/browser.ts @@ -89,7 +89,7 @@ export async function checkBrowser(url:string,parentSignal?:AbortSignal):Promise await navigate(url);await settle();if(['urait.ru','book.ru'].includes(root))await page.waitForLoadState('networkidle',{timeout:4000}).catch(()=>{});let snapshot=await capture(); if(root==='book.ru'){ // CSS tooltips become part of the accessible name on hover; retain a stable DOM-text locator. - const preview=page.locator('a[href*="reader.new.book.ru"]').filter({hasText:'Ознакомиться'}).first(); + const preview=page.locator('a[href*="reader.new.book.ru"]').filter({hasText:'Ознакомиться',visible:true}).first(); if(await preview.count()){ await preview.hover({timeout:3000}).catch(()=>{}); await page.waitForFunction(()=>/гостевом\s+режиме|доступны\s+только\s+\d+\s+страниц/i.test(document.body?.innerText??''),undefined,{timeout:3000}).catch(()=>{});snapshot=await capture(); diff --git a/tests/browser.security.ts b/tests/browser.security.ts index 4857e70..d75e44e 100644 --- a/tests/browser.security.ts +++ b/tests/browser.security.ts @@ -68,3 +68,8 @@ test('BOOK.ru locked orange preview is unavailable even without a loaded tooltip fixture=fixture.replace('','Читать полностью'); assert.equal((await checkBrowser('https://book.ru/book/940586')).status,'unknown','A full-reading control contradicts the locked-preview-only signal'); }); + +test('a hidden BOOK.ru preview cannot prove a restriction through its pseudo-element',async()=>{ + fixture='

Book

Ознакомиться
'; + const check=await checkBrowser('https://book.ru/book/940586');assert.equal(check.status,'unknown',check.reason);assert.equal(check.code,200); +});