Local LLM Collected Listings via the DOM and Stopped After the Sixth Request
A local Qwen-class 7B/8B model was turned into a browser agent that searches for rare hardware on a classifieds site. Instead of calling an API, the model drove a regular Edge browser through Playwright, found cards by prices and IDs, and then linked data scattered across the DOM. On the sixth visit the platform returned a 429, after which the agent stopped making requests and compiled a report from its local buffer. It is a useful PoC, but not proof of a universal way around protection.
AI-processed from Habr AI; edited by Hamidun News
An ordinary classifieds scraper often breaks before it extracts a single useful line: the server answers 403, throttles the request rate or serves a page assembled by JavaScript. The author of the experiment tried a different path: he tasked a local Qwen-class 7B/8B model with working with the site through a regular browser and extracting data not by brittle CSS classes, but by semantic cues.
In a simple example, the task looked like this: find a rare mobile workstation with a specific graphics card and collect the name, price, city and a link to the seller. The agent opened the results in Edge controlled by Playwright, inspected the DOM and looked for familiar anchor points: a currency sign, large adjacent text and the listing identifier in the link. If seller details were located in another part of the page, records were linked by Item ID.
Why the DOM Proved More Useful Than CSS
A modern interface can change class names after every update. A selector that worked yesterday returns an empty list tomorrow. Text cues are more stable: a price still contains a currency symbol, a card leads to a unique address, and the title remains next to the price in the page structure.
The agent used these cues as landmarks. It first found the node with the price, then climbed to the card container, extracted the title and link, and then matched additional fields by identifier. This approach resembles how a person works: we also don't know the CSS class name of a button, but we understand its purpose from its text and position.
There is also a more interesting result. In one listing, the title promised a higher-end graphics card, while the description indicated a lower model with 16 GB of memory. The agent noticed the discrepancy and flagged the card for manual review. For a product team this matters more than a flashy demonstration of autonomy: the model did not simply copy rows, it checked the consistency of the data within the listing.
Where the Experiment Hit Reality
On the sixth request the platform returned a 429 error: too many requests. The agent stopped making new requests and produced a report from the data it had already saved. This is sensible behavior, but it also undermines the loud claim of a "victory" over anti-fraud systems. Launching an ordinary browser does not make a system invulnerable: the platform still sees the frequency of actions and can restrict access.
The author's claimed one hundred percent matching accuracy has also not been confirmed by an independent test. The sample size, the number of missed cards and the error rate on other pages are unknown. The experiment involved interactive debugging and manual observation, so it is too early to call the system fully autonomous.
There is also a legal boundary. The technical ability to read a page does not mean permission for mass data collection. Before running anything, check the platform's terms, robots.txt, acceptable load and rules for processing personal data. Protection mechanisms should not be treated as an annoying obstacle to be covertly bypassed.
What Developers Can Take Away
The value of the work lies not in a recipe for bypassing blocks, but in an architectural technique. For permitted scenarios, a browser agent can combine three layers: visual screenshot verification, DOM parsing by semantic markers, and a local buffer that allows it to finish cleanly after an error.
In production, this requires strict rate limits, retries with increasing delays, an action log, checks for sample completeness and manual confirmation of disputed results. It is best to start on your own site or in a test environment where automation is explicitly permitted.
The practical conclusion is simple: a small local LLM is already capable of driving a browser and collecting structured data from a dynamic page. But a good agent is defined not by its ability to get past protection at any cost, but by its ability to respect limits, notice contradictions and stop safely when the site says "enough."
- Nov 8, 2026Sber Open-Sources Universal Agent: Same Model, New Harness, 24 Points Better
- Nov 8, 2026Blind developer teaches an AI agent not to invent accessibility bugs in code
- Nov 8, 2026How QA agents build their own knowledge base and cut root-cause analysis from 2 hours to 10 minutes
- Nov 8, 2026AWS Runs Claude Code Remotely: One microVM per Task
Key Questions Answered
Why the DOM Proved More Useful Than CSS?
A modern interface can change class names after every update. A selector that worked yesterday returns an empty list tomorrow. Text cues are more stable: a price still contains a currency symbol, a card leads to a unique address, and the title remains next to the price in the page structure. The agent used these cues as landmarks. It first found the node with the price, then climbed to the card container, extracted the title and link, and then matched additional fields by identifier.
Where the Experiment Hit Reality?
On the sixth request the platform returned a 429 error: too many requests. The agent stopped making new requests and produced a report from the data it had already saved. This is sensible behavior, but it also undermines the loud claim of a "victory" over anti-fraud systems. Launching an ordinary browser does not make a system invulnerable: the platform still sees the frequency of actions and can restrict access.
What Developers Can Take Away?
The value of the work lies not in a recipe for bypassing blocks, but in an architectural technique. For permitted scenarios, a browser agent can combine three layers: visual screenshot verification, DOM parsing by semantic markers, and a local buffer that allows it to finish cleanly after an error. In production, this requires strict rate limits, retries with increasing delays, an action log, checks for sample completeness and manual confirmation of disputed results.
Test Frontier LLMs & Autonomous Agents in One Workspace
Run Claude Opus 5.5, GPT-6, Gemini 3.1, and DeepSeek side-by-side in Nomad AI (nomadnet.ai) — unified model routing, deep research, and multimodal workflows under one subscription.
The AI world, distilled — once a week
Seven stories that actually mattered, hand-picked. No noise, no reposts, no press releases.
Done! Check your inbox for a confirmation.