Skip to main content

DOM մանիպուլյացիայի API

@grant CAT.agent.dom

DOM մանիպուլյացիայի API-ն ապահովում է զննարկչի էջի ամբողջական ավտոմատացում. նավիգացիա, բովանդակության ընթերցում, սքրինշոթներ, ձևերի հետ փոխազդեցություն և DOM մոնիտորինգ:

Ներդիրների կառավարում

listTabs — ներդիրների ցուցակագրում

const tabs = await CAT.agent.dom.listTabs();

Վերադարձնում է տեղեկատվություն յուրաքանչյուր բաց ներդիրի մասին:

Վերադարձնում է TabInfo[]՝

ԴաշտՏիպՆկարագրություն
tabIdnumberՆերդիրի ID
urlstringԸնթացիկ URL
titlestringԷջի վերնագիր
activebooleanԱրդյոք սա ներկայումս ակտիվ ներդիրն է
windowIdnumberԱյն պատկանող պատուհանի ID
discardedbooleanԱրդյոք այն դեն նետվել է (կասեցված)

Նավիգացիա

const result = await CAT.agent.dom.navigate(url, options?);

Պարամետրեր՝

ՊարամետրՏիպԼռելյայնՆկարագրություն
urlstringԹիրախային URL (պարտադիր)
options.tabIdnumberընթացիկ ակտիվ ներդիրՈր ներդիրն օգտագործել
options.waitUntilbooleantrueԱրդյոք սպասել էջի բեռնման ավարտին
options.timeoutnumber30000Թայմաութ միլիվայրկյաններով

Վերադարձնում է NavigateResult՝

{ tabId: number; url: string; title: string }

Բովանդակության ընթերցում

readPage — էջի բովանդակության ընթերցում

const page = await CAT.agent.dom.readPage(options?);

Փոխակերպում է էջի DOM-ը կառուցվածքային տեքստի՝ ավտոմատ կերպով հեռացնելով անկապ տարրերը, ինչպիսիք են <script>-ը, <style>-ը, <noscript>-ը, <svg>-ը և <link[rel=stylesheet]>-ը:

Պարամետրեր՝

ՊարամետրՏիպԼռելյայնՆկարագրություն
options.tabIdnumberընթացիկ ակտիվ ներդիրՈր ներդիրն օգտագործել
options.selectorstringCSS սելեկտոր. վերադարձվում է միայն համընկնած տարրի բովանդակությունը
options.maxLengthnumberԲովանդակության առավելագույն նիշեր. դրանից ավելին կտրվում է
options.removeTagsstring[]Հեռացվող լրացուցիչ պիտակների անուններ

Վերադարձնում է PageContent՝

ԴաշտՏիպՆկարագրություն
titlestringԷջի վերնագիր
urlstringԷջի URL
htmlstringՄշակված էջի տեքստային բովանդակություն
truncatedbooleanԱրդյոք բովանդակությունը կտրվել է
totalLengthnumberԲնօրինակ բովանդակության ընդհանուր երկարությունը

screenshot — սքրինշոթի նկարահանում

const shot = await CAT.agent.dom.screenshot(options?);

Պարամետրեր՝

ՊարամետրՏիպԼռելյայնՆկարագրություն
options.tabIdnumberընթացիկ ակտիվ ներդիրՈր ներդիրն օգտագործել
options.qualitynumber80JPEG որակ (0-100)
options.fullPagebooleanfalseՆկարահանել ամբողջ էջը
options.selectorstringCSS սելեկտոր. նկարահանել միայն համընկնած տարրի տարածքը
options.saveTostringՊահպանման ուղի OPFS աշխատանքային տարածքում

Վերադարձնում է ScreenshotResult՝

ԴաշտՏիպՆկարագրություն
dataUrlstringbase64 տվյալների URL
pathstringOPFS պահպանման ուղի (երբ օգտագործվում է saveTo)
sizenumberՖայլի չափ (երբ օգտագործվում է saveTo)

Ինչպե՞ս է ընտրվում նկարահանման ռեժիմը՝

ՍցենարՎարքագիծ
selector տրված էԳտնում է տարրի սահմանները CDP-ի միջոցով և կտրում է սքրինշոթը
Ֆոնային ներդիրՓորձում է CDP սքրինշոթ. եթե ձախողվում է, ակտիվացնում է ներդիրը և օգտագործում captureVisibleTab
Առաջին պլանի ներդիրՈւղղակիորեն օգտագործում է captureVisibleTab
// Save a screenshot to OPFS
const shot = await CAT.agent.dom.screenshot({
saveTo: "screenshots/page.png",
quality: 90
});
console.log(`Saved to ${shot.path}, size ${shot.size} bytes`);

Էջի հետ փոխազդեցություն

click — տարրի վրա սեղմում

const result = await CAT.agent.dom.click(selector, options?);

Պարամետրեր՝

ՊարամետրՏիպԼռելյայնՆկարագրություն
selectorstringCSS սելեկտոր (պարտադիր)
options.tabIdnumberընթացիկ ակտիվ ներդիրՈր ներդիրն օգտագործել
options.trustedbooleanfalseՕգտագործել CDP-ն՝ իրական մկնիկի իրադարձություն ուղարկելու համար

Վերադարձնում է ActionResult՝

ԴաշտՏիպՆկարագրություն
successbooleanԱրդյոք հաջողվեց
navigatedbooleanԱրդյոք սեղմումը հրահրեց էջի նավիգացիա
urlstringՆավիգացիայից հետո նոր URL
newTabbooleanԱրդյոք նոր ներդիր բացվեց

trusted ընդդեմ սովորական սեղմման՝

  • trusted: false (լռելյայն) — նմանակում է element.click()-ը ներարկված JS-ի միջոցով. արագ է, բայց որոշ կայքեր կարող են այն հայտնաբերել որպես ոչ իսկական իրադարձություն
  • trusted: true — ուղարկում է իրական մկնիկի իրադարձություն Chrome DevTools Protocol-ի միջոցով, անտարբերելի իրական օգտագործողի փոխազդեցությունից, բայց պահանջում է վրիպազերծիչի թույլտվություն

fill — ձևի դաշտի լրացում

const result = await CAT.agent.dom.fill(selector, value, options?);

Պարամետրեր՝

ՊարամետրՏիպՆկարագրություն
selectorstringCSS սելեկտոր (պարտադիր)
valuestringԼրացվող արժեք (պարտադիր)
options.tabIdnumberՈր ներդիրն օգտագործել
options.trustedbooleanՕգտագործել CDP-ն՝ ստեղնաշարի մուտքագրումը նմանակելու համար

Վարքագիծ.

  • Նորմալ ռեժիմ. սահմանում է element.value և ուղարկում է input իրադարձություն
  • Վստահելի ռեժիմ. CDP-ն ֆոկուսավորում է տարրը → մուտքագրում է նիշ առ նիշ

scroll — էջի ոլորում

const result = await CAT.agent.dom.scroll(direction, options?);

Պարամետրեր՝

ՊարամետրՏիպՆկարագրություն
direction"up" | "down" | "top" | "bottom"Ոլորման ուղղություն (պարտադիր)
options.tabIdnumberՈր ներդիրն օգտագործել
options.selectorstringՈլորել կոնկրետ կոնտեյներ՝ ամբողջ էջի փոխարեն

Վերադարձնում է ScrollResult՝

ԴաշտՏիպՆկարագրություն
scrollTopnumberՈլորման դիրքը ոլորումից հետո
scrollHeightnumberԲովանդակության ընդհանուր բարձրությունը
clientHeightnumberԴիտափորկի բարձրությունը
atBottombooleanԱրդյոք այժմ ոլորված է մինչև ներքև

waitFor — տարրի սպասում

const result = await CAT.agent.dom.waitFor(selector, options?);

Հարցում է կատարում նշված տարրի էջում հայտնվելու համար (ստուգելով յուրաքանչյուր 500մվ):

Պարամետրեր՝

ՊարամետրՏիպԼռելյայնՆկարագրություն
selectorstringCSS սելեկտոր (պարտադիր)
options.tabIdnumberընթացիկ ակտիվ ներդիրՈր ներդիրն օգտագործել
options.timeoutnumber10000Թայմաութ միլիվայրկյաններով

Վերադարձնում է WaitForResult՝

ԴաշտՏիպՆկարագրություն
foundbooleanԱրդյոք տարրը գտնվեց
elementobjectՏարրի տեղեկատվություն (միայն երբ found=true)
element.selectorstringՀամընկած սելեկտորը
element.tagstringՊիտակի անուն
element.textstringՏեքստային բովանդակություն
element.rolestringARIA դերը
element.typestringinput տիպ
element.visiblebooleanԱրդյոք տեսանելի է

Սկրիպտի կատարում

executeScript — JavaScript-ի գործարկում

const result = await CAT.agent.dom.executeScript(code, options?);

Պարամետրեր՝

ՊարամետրՏիպԼռելյայնՆկարագրություն
codestringJavaScript կոդ (պարտադիր)
options.tabIdnumberընթացիկ ակտիվ ներդիրՈր ներդիրն օգտագործել

Կոդը միշտ գործարկվում է էջի MAIN world-ում (կիսելով նույն window օբյեկտը, ինչ էջի սեփական JS-ը), ուստի այն կարող է կանչել էջի սեփական ֆունկցիաները և ուղղակիորեն կարդալ էջի փոփոխականները — բայց նույն պատճառով այն չի կարող մուտք գործել ընդլայնման բլոբ URL-ները (օր.՝ blob: URL, որը դուք ստեղծում եք URL.createObjectURL()-ի միջոցով CAT.agent.opfs.read"blob" ռեժիմում վերադարձրած Blob-ից), քանի որ բլոբ URL-ները սահմանափակված են ընդլայնման սեփական ծագմամբ: Եթե անհրաժեշտ է աշխատել բլոբ URL-ի հետ մեկուսացված կոնտեքստում, փոխարենը օգտագործեք SkillScript (տեսեք Skill մշակում):

// Call a page's own JS function / read a page variable
const data = await CAT.agent.dom.executeScript(
"return window.__APP_STATE__"
);

// Read DOM content
const title = await CAT.agent.dom.executeScript(
"return document.querySelector('h1')?.textContent"
);

Կոդը կատարման համար փաթաթվում է new Function()-ի մեջ և աջակցում է return արժեքին: Թայմաութը 30 վայրկյան է:

DOM մոնիտորինգ

Օգտագործում է Chrome DevTools Protocol-ը՝ էջի DOM փոփոխությունները և երկխոսության իրադարձությունները վերահսկելու համար:

startMonitor — մոնիտորինգի մեկնարկ

await CAT.agent.dom.startMonitor(tabId);

Սկսում է նշված ներդրի մոնիտորինգը DOM փոփոխությունների և երկխոսությունների համար (alert/confirm/prompt):

stopMonitor — մոնիտորինգի կանգառ

const result = await CAT.agent.dom.stopMonitor(tabId);

Կանգնեցնում է մոնիտորինգը և վերադարձնում հավաքված փոփոխությունները:

Վերադարձնում է MonitorResult՝

ԴաշտՏիպՆկարագրություն
dialogsArray<{ type, message }>Երկխոսությունների ցուցակ
addedNodesArray<{ tag, id?, class?, role?, text }>Նոր ավելացված DOM հանգույցների ամփոփում

addedNodes-ը եզակիացվում է հանգույցի ID-ով և սահմանափակվում է 50 գրառումով. հանգույցները, որոնք այդ ընթացքում հեռացվել են էջից կամ տեսանելի չեն, ավտոմատ կերպով բաց են թողնվում: text-ը հանգույցի outerHTML-ից ստացված սովորական տեքստ է՝ կտրված 300 նիշի:

peekMonitor — մոնիտորինգի կարգավիճակի ստուգում

const status = await CAT.agent.dom.peekMonitor(tabId);

Ոչ կործանարար կերպով ստուգում է ընթացիկ մոնիտորինգի կարգավիճակը:

Վերադարձնում է MonitorStatus՝

ԴաշտՏիպՆկարագրություն
hasChangesbooleanԱրդյոք կան որևէ փոփոխություններ
dialogCountnumberԵրկխոսությունների քանակ
nodeCountnumberՆոր ավելացված հանգույցների քանակ

Ամբողջական օրինակ

// ==UserScript==
// @name Auto form filler
// @match https://example.com/form
// @grant CAT.agent.dom
// ==/UserScript==

// Wait for the form to load
await CAT.agent.dom.waitFor("form#signup", { timeout: 5000 });

// Fill in the form
await CAT.agent.dom.fill("input[name=username]", "test_user");
await CAT.agent.dom.fill("input[name=email]", "[email protected]");

// Check the agreement box
await CAT.agent.dom.click("input[type=checkbox]#agree");

// Screenshot the filled-in form
await CAT.agent.dom.screenshot({
selector: "form#signup",
saveTo: "screenshots/form-filled.png"
});

// Click submit
const result = await CAT.agent.dom.click("button[type=submit]", { trusted: true });
if (result.navigated) {
console.log("Form submitted successfully, navigated to:", result.url);
}