rabbit-browser
Version:
Browser automation tool for detecting interactive elements on web pages
172 lines (171 loc) • 5.86 kB
TypeScript
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[];
}
}