com um clique
ieee-parse-results
// Re-parses the currently open IEEE Xplore search results page. Internal skill used by other skills to extract structured data without navigation.
// Re-parses the currently open IEEE Xplore search results page. Internal skill used by other skills to extract structured data without navigation.
Performs advanced search on IEEE Xplore with filters like author, title, publication, year, DOI. Use when the user wants filtered academic paper search.
Downloads PDF from IEEE Xplore articles. Requires institutional or subscriber access. Use when the user wants to download a paper PDF by article number.
Exports citations from IEEE Xplore in RIS, BibTeX, or plain text format. Supports pushing to Zotero. Use when the user wants to export or save citation data for papers.
Browses a journal or conference on IEEE Xplore — views info, impact factor, latest articles, and specific issues. Use when the user asks about a journal/conference or wants to browse its contents.
Navigates pages, changes sort order, or adjusts results per page on IEEE Xplore search results. Use when the user wants to go to the next page, sort by date or citations, or change results per page.
Extracts full metadata from an IEEE Xplore article page (abstract, authors, keywords, DOI, references, PDF link). Use when the user wants details about a specific paper.
| name | ieee-parse-results |
| description | Re-parses the currently open IEEE Xplore search results page. Internal skill used by other skills to extract structured data without navigation. |
| user-invocable | false |
Extract structured data from an already-open IEEE Xplore search results page without navigating.
Use evaluate_script (no navigation needed):
async () => {
// Verify we are on a search results page
if (!window.location.pathname.includes('/search')) {
return { error: 'Not on an IEEE Xplore search results page.' };
}
// Wait for results if still loading
for (let i = 0; i < 20; i++) {
if (document.querySelectorAll('.List-results-items .result-item').length > 0) break;
await new Promise(r => setTimeout(r, 500));
}
const items = document.querySelectorAll('.List-results-items .result-item');
if (items.length === 0) {
return { error: 'No results found on the current page. The page may still be loading.' };
}
const papers = [];
for (let i = 0; i < items.length; i++) {
const item = items[i];
const titleLink = item.querySelector('h3 a[href*="/document/"]');
const authors = [...item.querySelectorAll('.author a[href*="/author/"]')].map(a => a.textContent.trim());
const pubLink = item.querySelector('.description a[href*="/xpl/"]');
const publisherInfo = item.querySelector('.publisher-info-container');
const infoText = publisherInfo?.textContent?.trim() || '';
const yearMatch = infoText.match(/Year:\s*(\d{4})/);
const docNumber = titleLink?.href?.match(/\/document\/(\d+)/)?.[1] || '';
const itemText = item.textContent || '';
const citedByMatch = itemText.match(/Cited by:.*?(\d+)/);
const citedBy = citedByMatch ? citedByMatch[1] : '';
const hasCheckbox = !!item.querySelector('input[type="checkbox"]');
papers.push({
rank: i + 1,
title: titleLink?.textContent?.trim()?.replace(/<[^>]+>/g, '') || '',
arnumber: docNumber,
authors,
publication: pubLink?.textContent?.trim() || '',
year: yearMatch ? yearMatch[1] : '',
info: infoText,
citedBy,
hasCheckbox,
});
}
const resultCount = document.querySelector('.Dashboard-header span')?.textContent?.trim() || '';
const currentUrl = window.location.href;
const urlParams = Object.fromEntries(new URL(currentUrl).searchParams);
return { papers, resultCount, currentUrl, urlParams };
}
Return the extracted data. The arnumber field is the primary key for all subsequent operations (detail, download, export).
evaluate_script).