| name | jobindex-search |
| description | Search for jobs on jobindex.dk. Use when the user wants to find jobs, search for positions, look for work, or browse job listings on Jobindex. Supports filtering by keyword, location, category, recency, and pagination. |
| allowed-tools | Bash(playwright-cli:*) |
| argument-hint | ["search query"] |
Jobindex.dk Job Search
Search for jobs on jobindex.dk using playwright-cli for browser automation.
Prerequisites
A browser session must be open. If not, open one:
playwright-cli -s=jobindex open https://www.jobindex.dk
playwright-cli -s=jobindex open https://www.jobindex.dk --headed
Named session -s=jobindex allows this skill to run in parallel with other job search skills. Use -s=jobindex on all subsequent commands.
Workflow
Step 1: Dismiss popups
On first visit, up to three popups appear. Dismiss them in order:
playwright-cli -s=jobindex snapshot
playwright-cli -s=jobindex click <ref-for-Afvis>
playwright-cli -s=jobindex click <ref-for-Luk>
playwright-cli -s=jobindex click <ref-for-dialog-Luk>
Important: Refs change per session. Always take a snapshot first and find buttons by name:
- Cookie: button named "Afvis"
- AI popup: button named "Luk"
- Jobagent: button named "Luk" inside a
dialog element
Some popups may not appear. That's fine — just continue.
Step 2: Navigate to search results via URL
The most efficient approach is constructing the URL directly:
playwright-cli -s=jobindex goto "https://www.jobindex.dk/jobsoegning?q=data+engineer"
For detailed URL patterns, see url-reference.md.
Step 3: Extract job listings
playwright-cli -s=jobindex run-code 'async page => {
const jobs = await page.$$eval("div.PaidJob, div.jix_robotjob", cards => cards.map(card => {
const title = card.querySelector("h4 a")?.textContent?.trim() || "";
const url = card.querySelector("h4 a")?.href || "";
const company = card.querySelector("a[href]")?.textContent?.trim() || "";
const locationEl = card.querySelector("h4")?.parentElement?.querySelector("h4 ~ div");
const location = locationEl?.textContent?.replace(/Se rejsetid/g, "").trim() || "";
const date = card.querySelector("time")?.textContent?.trim() || "";
const desc = Array.from(card.querySelectorAll("p")).map(p => p.textContent.trim()).join(" ");
return { title, company, location, date, url, desc: desc.substring(0, 300) };
}));
const countEl = await page.$("h2");
const count = countEl ? await countEl.textContent() : "";
return JSON.stringify({ total: count.trim(), jobs }, null, 2);
}'
Step 4: Present results to the user
Format the extracted jobs as a readable list with:
- Job title (linked to URL)
- Company name
- Location
- Posted date
- Short description
Using the Geografi (km radius) Filter
When the user wants jobs near a specific address/city, use the Geografi filter UI. This cannot be done via URL alone.
Procedure
playwright-cli -s=jobindex goto "https://www.jobindex.dk/jobsoegning?q=administrativ"
playwright-cli -s=jobindex snapshot
playwright-cli -s=jobindex click <ref-for-Geografi-button>
playwright-cli -s=jobindex fill <ref-for-km-spinbutton> "30"
playwright-cli -s=jobindex fill <ref-for-address-textbox> "Skævinge"
playwright-cli -s=jobindex snapshot
playwright-cli -s=jobindex click <ref-for-address-option>
playwright-cli -s=jobindex press Tab
playwright-cli -s=jobindex snapshot
playwright-cli -s=jobindex click <ref-for-vis-job-button>
Known pitfalls
- NEVER press Escape in filter panels — it closes the entire panel and loses unsaved values
- Autocomplete dropdown blocks clicks — after selecting an address option, press
Tab to dismiss the dropdown before clicking "Vis X job"
- Both km AND address required — setting only one won't filter
- Filter values are lost if panel closes — always click "Vis X job" before doing anything else
- Refs change between snapshots — always take a fresh snapshot before clicking
If "Vis X job" is blocked by overlay, use force click as last resort:
playwright-cli -s=jobindex run-code 'async page => { await page.getByRole("button", { name: /Vis.*job/ }).click({ force: true }); }'
Using the Kategorier Filter
Works similarly to Geografi but with category autocomplete:
Tips
- Broad vs exact search:
q=data+engineer (broad, many results) vs q=%27data+engineer%27 (exact match with quotes, fewer results)
- Pagination: Add
&page=2, &page=3 etc. ~20 results per page.
- Multiple pages: To get more results, loop through pages by incrementing the page parameter.
- Popups: On a fresh session you MUST dismiss popups before extracting data. After the first dismissal in a session, they won't reappear.
- Browser reuse: If a browser is already open from a previous command, just use
playwright-cli -s=jobindex goto — no need to reopen.
- Always snapshot before interacting — refs are session-specific and change with every snapshot.
- Prefer URL construction over UI interaction when possible — it's faster and avoids filter panel pitfalls.