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.selectorstring—CSS սելեկտոր. վերադարձվում է միայն համընկնած տարրի բովանդակությունը
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.selectorstring—CSS սելեկտոր. նկարահանել միայն համընկնած տարրի տարածքը
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?);

Պարամետրեր՝

ՊարամետրՏիպԼռելյայնՆկարագրություն
selectorstring—CSS սելեկտոր (պարտադիր)
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մվ):

Պարամետրեր՝

ՊարամետրՏիպԼռելյայնՆկարագրություն
selectorstring—CSS սելեկտոր (պարտադիր)
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?);

Պարամետրեր՝

ՊարամետրՏիպԼռելյայնՆկարագրություն
codestring—JavaScript կոդ (պարտադիր)
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);
}