
Sd Journal Browse
- 19 installs
- 45 repo stars
- Updated June 23, 2026
- yuanyuanma03/academic-research-skills
Browse a ScienceDirect journal's info, impact factor, latest articles, and specific volumes or issues by journal name or slug.
About
Navigates ScienceDirect journal pages and extracts journal metrics and article listings. A researcher uses it to look up a journal or browse its issues and contents.
- URL patterns for journal home, issues, editorial board, and insights
- Converts a journal name to its ScienceDirect slug
Sd Journal Browse by the numbers
- 19 all-time installs (skills.sh)
- Ranked #1,308 of 2,715 Automation & Workflows skills by installs in the Skillselion catalog
- Data as of Aug 3, 2026 (Skillselion catalog sync)
npx skills add https://github.com/yuanyuanma03/academic-research-skills --skill sd-journal-browseAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 19 |
|---|---|
| repo stars | ★ 45 |
| Last updated | June 23, 2026 |
| Repository | yuanyuanma03/academic-research-skills ↗ |
What it does
Browse a ScienceDirect journal's info, impact factor, latest articles, and specific volumes or issues by journal name or slug.
Files
ScienceDirect Journal Browse
Browse journal information, metrics, and articles on ScienceDirect.
URL Patterns
| Page | URL |
|---|---|
| Journal home | {BASE_URL}/journal/{slug} |
| All issues | {BASE_URL}/journal/{slug}/issues |
| Specific volume/issue | {BASE_URL}/journal/{slug}/vol/{vol}/issue/{issue} |
| Supplement | {BASE_URL}/journal/{slug}/vol/{vol}/suppl/C |
| Editorial board | {BASE_URL}/journal/{slug}/about/editorial-board |
| Insights | {BASE_URL}/journal/{slug}/about/insights |
The slug is the journal's URL-friendly name (e.g. expert-systems-with-applications, nature-communications). If the user provides a journal name, convert it to a slug by lowercasing and replacing spaces with hyphens.
Steps
Step 1: Navigate to journal page
Use navigate_page with initScript to prevent bot detection:
navigate_page({
url: "{BASE_URL}/journal/{slug}",
initScript: "Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"
})
### Step 2: Extract journal info
Use `evaluate_script` with built-in waiting. Do NOT use `wait_for` — it returns oversized snapshots.
async () => { // Wait for journal content to load (up to 10s) for (let i = 0; i < 20; i++) { if (document.querySelector('h1') && document.querySelector('main button')) break; await new Promise(r => setTimeout(r, 500)); }
const result = {};
// Journal name result.name = document.querySelector('h1')?.textContent?.trim() || '';
// Metrics (CiteScore, Impact Factor) — take the FIRST match (this journal, not partner journals) const allButtons = [...document.querySelectorAll('main button')]; const firstCS = allButtons.find(b => b.textContent.includes('CiteScore')); const firstIF = allButtons.find(b => b.textContent.includes('Impact Factor')); if (firstCS) result.citeScore = firstCS.textContent.trim(); if (firstIF) result.impactFactor = firstIF.textContent.trim();
// Open access status const oaBtn = [...document.querySelectorAll('main button')].find(b => b.textContent.includes('open access')); result.openAccess = oaBtn ? oaBtn.textContent.trim() : 'Not specified';
// ISSN const pageText = document.body.innerText; const onlineISSN = pageText.match(/Online ISSN:\s([\d-X]+)/)?.[1] || ''; const printISSN = pageText.match(/Print ISSN:\s([\d-X]+)/)?.[1] || ''; result.issn = { online: onlineISSN, print: printISSN };
// Description — from "About the journal" section const aboutH2 = [...document.querySelectorAll('h2')].find(h => h.textContent.includes('About')); if (aboutH2) { let desc = ''; let sibling = aboutH2.nextElementSibling; while (sibling && sibling.tagName !== 'H2') { desc += sibling.textContent.trim() + ' '; sibling = sibling.nextElementSibling; } result.description = desc.trim().substring(0, 500); }
// Editor info const editorName = document.querySelector('.js-editor-name')?.textContent?.trim() || ''; const editorAff = document.querySelector('.js-editor-affiliation')?.textContent?.trim() || ''; result.editor = editorName + (editorAff ? ', ' + editorAff : '');
// Submission metrics result.metrics = {}; document.querySelectorAll('main button[class*="Info"]').forEach(btn => { const text = btn.textContent.trim(); const prevEl = btn.previousElementSibling; if (prevEl) { const days = prevEl.textContent.trim(); result.metrics[text] = days; } });
// Latest articles result.articles = []; const articleLinks = document.querySelectorAll('main a[href="/science/article/pii/"]'); const seen = new Set(); articleLinks.forEach(link => { const title = link.textContent.trim(); const pii = link.href.match(/pii\/(\w+)/)?.[1] || ''; if (title && pii && !seen.has(pii)) { seen.add(pii); const container = link.closest('div, li, section'); const pdfLink = container?.querySelector('a[href="pdfft"]'); result.articles.push({ title, pii, url: link.href, pdfUrl: pdfLink?.href || '', }); } }); result.articles = result.articles.slice(0, 10);
// Latest issue link const latestLink = document.querySelector('a[href*="/vol/"]'); result.latestIssueUrl = latestLink?.href || '';
return result; }
### Step 3: Present journal info
{name}
Impact Factor: {impactFactor} CiteScore: {citeScore} Open Access: {openAccess} ISSN: Online {online} | Print {print} Editor: {editor}
Description
{description}
Latest Articles
1. {title} (PII: {pii}) View PDF 2. ...
Latest issue: {latestIssueUrl}
## Browsing a specific issue
If the user asks for a specific volume/issue, navigate to `{BASE_URL}/journal/{slug}/vol/{vol}/issue/{issue}` and extract the article list using a similar approach.
## Notes
- Journal slugs are URL-friendly names. If unsure, search for the journal name first.
- The journal page shows latest published, articles in press, top cited, and most downloaded tabs.
- Always include `initScript` on every `navigate_page` call to prevent bot detection.
- If the page shows captcha, **auto-click the Cloudflare Turnstile checkbox**: use `take_snapshot` to find `checkbox "确认您是真人"` inside the Turnstile iframe, then `click(uid)`. Wait 3-5s and verify. If auto-click fails after 2 attempts, fall back to asking the user. After solving once, the session cookie persists.
- Use 2 tool calls: `navigate_page` + `evaluate_script`.