UNPKG

rabbit-browser

Version:

Browser automation tool for detecting interactive elements on web pages

172 lines (171 loc) 5.86 kB
import { ElementData, Options } from "./types"; /** * RabbitBrowser provides a simple API for detecting and highlighting interactive elements on web pages */ export declare class RabbitBrowser { private browser; private page; private cdpClient; private cdpSession; private isCDP; private initialized; private elements; private textBlocks; private pageContext; private currentUrl; private options; /** * Create a new RabbitBrowser instance */ constructor(options?: Partial<Options>); /** * Initialize the browser if it hasn't been initialized yet */ private ensureBrowserInitialized; /** * Initialize browser and page */ init(): Promise<void>; /** * Connect to an existing Chrome instance via CDP * @param options CDP connection options */ connectCDP(options?: { browserWSEndpoint?: string; browserURL?: string; }): Promise<void>; /** * Execute JavaScript in the page context via CDP * @param script JavaScript code to execute * @returns Result of the script execution */ evaluateWithCDP(script: string): Promise<any>; /** * Navigate to a URL and initialize the element detector * @param url The URL to navigate to * @param options Optional settings for this navigation * @returns Promise resolving when navigation and initialization are complete */ go(url: string): Promise<void>; /** * Get all detected elements * @returns Promise resolving to an array of detected elements with their properties */ getElements(): Promise<ElementData[]>; /** * Get all detected text blocks * @returns Promise resolving to an array of text blocks with their content */ getTextBlocks(): Promise<any[]>; /** * Get page context information including text content * @returns Promise resolving to page context object with text content */ getPageContext(): Promise<any>; /** * Get complete data with elements, text blocks and page context * @returns Promise resolving to object containing elements, text blocks and page context */ getCompleteData(): Promise<{ elements: ElementData[]; textBlocks: any[]; pageContext: any; }>; /** * Get element count * @returns Promise resolving to number of detected elements */ getElementCount(): Promise<number>; /** * Get the current URL from the page using CDP * @returns The current URL */ getCurrentPageUrl(): Promise<string>; /** * Get the current URL * @returns Promise resolving to the current URL */ getCurrentUrl(): Promise<string>; /** * Get elements that match certain criteria * @param filter Function that returns true for elements to include * @returns Promise resolving to filtered elements */ filterElements(filter: (element: ElementData) => boolean): Promise<ElementData[]>; /** * Find elements by text content * @param text Text to search for * @returns Promise resolving to elements that contain the specified text */ findElementsByText(text: string): Promise<ElementData[]>; /** * Find elements by tag name * @param tagName Tag name to search for * @returns Promise resolving to elements with the specified tag name */ findElementsByTagName(tagName: string): Promise<ElementData[]>; /** * Click on an element * @param elementOrIndex The element data or index of the element to click * @returns Promise resolving when the click is complete */ clickElement(elementOrIndex: ElementData | number): Promise<void>; /** * Fill an input element with text * @param elementOrIndex The element data or index of the input element to fill * @param value The text value to fill in * @returns Promise resolving when the input is filled */ fillInput(elementOrIndex: ElementData | number, value: string): Promise<void>; /** * Submit a form * @param formElementOrIndex The form element data or index to submit * @returns Promise resolving when the form is submitted */ submitForm(formElementOrIndex: ElementData | number): Promise<void>; /** * Select an option in a dropdown * @param selectElementOrIndex The select element data or index * @param optionValue The value of the option to select * @returns Promise resolving when the option is selected */ selectOption(selectElementOrIndex: ElementData | number, optionValue: string): Promise<void>; /** * Takes a screenshot of the current page * @param path File path to save the screenshot */ takeScreenshot(path: string): Promise<void>; /** * Close the browser */ close(): Promise<void>; /** * Check if the browser is initialized */ isInitialized(): boolean; } export declare const rabbitBrowser: RabbitBrowser; declare global { interface Window { highlightedElements: Array<{ element: Element; highlight: HTMLElement; number: HTMLElement; }>; highlightedTextBlocks: Array<{ element: Element; highlight: HTMLElement; number: HTMLElement; text: string; }>; processedElements: Set<Element>; processedTextBlocks: Set<Element>; elementObserver: IntersectionObserver; textObserver: IntersectionObserver; updateHighlights: () => void; highlightClickableElement: (element: Element, index: number) => void; highlightTextBlock: (element: Element, index: number) => void; startObservingNewElements: () => void; getClickableElements: () => Element[]; } }