AQLResponseProxy
The AQLResponseProxy
class is returned by the AgentQL's Page
's queryElements()
method. It's not the actual data but a metadata structure that allows intuitive access to web elements using dot notation. You can convert this class into raw data as a structured dictionary using its toData()
method.
To access desired web elements, users can directly use the names defined in queries as attributes of the response object. It returns desired elements as Playwright Locator, and users can interact with these elements, such as click or type, through the Playwright Locator API.
The following example queries for web elements through the queryElements()
method, interacts with these elements through AQLResponseProxy
objects, and converts AQLResponseProxy
objects into raw data.
Example Usage
const { configure, wrap } = require('agentql');
const { chromium } = require('playwright');
const QUERY = `
{
search_box
header {
search_btn
}
}
`;
(async () => {
// Configure the API key
configure({ apiKey: process.env.AGENTQL_API_KEY });
const browser = await chromium.launch({ headless: false });
const page = await wrap(await browser.newPage());
await page.goto('https://duckduckgo.com');
// Get AQLResponseProxy, which contains desired web elements
const aqlResponse = await page.queryElements(QUERY);
// Access the elements with dot notation and interact with them as Playwright Locator objects
await aqlResponse.search_box.type('AgentQL');
// To access a nested element in query, simply chain attributes together with dot notation
await aqlResponse.header.search_btn.click();
// Convert response into raw data as structured map with toData() method
const rawDataInDict = await aqlResponse.toData();
console.log(rawDataInDict);
// Used only for demo purposes. It allows you to see the effect of the script.
await page.waitForTimeout(10000);
await browser.close();
})();
Methods
toData
Converts the response data into a structured map based on the query tree.
Usage
const aqlResponse = await page.queryElements(QUERY);
const data = await aqlResponse.toData();
Returns
- Promise<Record<string, any>>: A structured JavaScript object in the following format:
{
"query_field": "text content of the corresponding web element"
}
getAttribute
This method is used to access attributes of the response object. If called on an innermost node of the query, it returns the desired web element as a Playwright Locator. Please check the Playwright Locator API for available methods.
If called on a container node of the query, it returns another AQLResponseProxy
object.
Usage
const QUERY = `
{
search_btn
search_results[]
}
`;
const aqlResponse = await page.queryElements(QUERY);
// This invokes Playwright Locator object's click() method
await aqlResponse.search_btn.click();
// This iterates through search results with AQLResponseProxy
for (const searchResult of aqlResponse.search_results) {
console.log(searchResult);
}
Arguments
name
String: The name of the attribute to access.
Returns
The corresponding AQLResponseProxy or Playwright Locator object.
getItem
Allows indexing into the response data if it's an array.
Usage
const QUERY = `
{
search_results[]
}
`;
const aqlResponse = await page.queryElements(QUERY);
// Get the second result in the list
const secondResult = aqlResponse.search_results[1];
Returns
The corresponding AQLResponseProxy or Playwright Locator object at the specified index.
getLength
Returns the number of items in the response data if it's an array.
Usage
const QUERY = `
{
search_results[]
}
`;
const aqlResponse = await page.queryElements(QUERY);
// Get the number of search results
const resultCount = aqlResponse.search_results.length;
Returns
The number of items in the array.