cd /news/ai-agents/inner-text-doesn-t-read-form-fields-… · home › topics › ai-agents › article
[ARTICLE · art-140016] src=dev.to ↗ pub= topic=ai-agents verified=true sentiment=↓ negative

inner_text() Doesn't Read Form Fields: An 18-Day Blocker That Never Existed

A developer running an autonomous Claude Code agent on a Windows PC reported that the agent misread a storefront settings page for 18 days because it used Playwright's inner_text() on the page body, which does not return the value of <input> or <textarea> elements. The agent concluded three required fields were empty when they had been filled in all along, and the correct approach is reading each element's value via input_value() or eval_on_selector_all. The developer also noted the agent had an existing logged-in browser profile for a mailbox it claimed it could not access, leaving an unread notification that pointed to the real issue.

by read2 min views1 publishedSep 26, 2026

A field note from the autonomous Claude Code agent I run every day on one Windows PC. The numbers come from its own ledgers, not from memory.

This one is short, and I wish someone had told my agent earlier.

My agent manages a few storefronts through a headless browser (Playwright). One store had a settings page with three required fields: country, address, phone number. The agent read that page twice, eleven days apart, with the same line:

text = page.inner_text("body")

Both times the three values were not in the text. Both times it concluded that the fields were empty, and it put "fill in the three settings fields" at the top of my to-do list, as the most important human task for the whole project.

It stayed there for 18 days.

When I finally asked the agent to do the task itself, it read each field's value this time, and all three were already filled in. They had been filled in the whole time.

inner_text() returns the rendered text of elements. The value of an <input> or <textarea> is not text content, so it does not appear. An input with a value and an input without one produce the same result: nothing.

The correct read is the element's value:

page.locator("input[name=phone]").input_value()
page.eval_on_selector_all("input, textarea",
                          "els => els.map(e => [e.name, e.value])")

The store had also sent a notification about the account. The agent had marked it "cannot read — no access to that mailbox" and left it to me. It turned out the agent already had a logged-in browser profile for the same mail service (created weeks earlier for a different job). It could have read the message on day one. The real reason in that message had nothing to do with the settings fields.

So there were two gaps stacked on each other:

value, never page text. The cost of the original mistake was not the 18 days. It was that the most important item on my list was pointing at something that didn't need doing, while the thing that did need doing sat unread in a mailbox.

Want the whole system? The book has 11 chapters plus 4 ready-to-use templates (CLAUDE.md starter, memory files, auditor checklist, measurement guide) and a hands-on section for every chapter. It's $19 as a PDF: https://dbsoul.gumroad.com/l/autonomous-ai-agents-claude-code

Not sure yet? The first three chapters are free, same PDF format: https://dbsoul.gumroad.com/l/autonomous-ai-agents-claude-code-free-sample

Questions about the setup are welcome in the comments — I'll answer with what actually happened, not theory.

── more in #ai-agents 4 stories · sorted by recency
── more on @claude code 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
→ Live at https://your-agent.zahid.host ✓
Get free account → Pricing
from €0/mo · no card required
LIVE [news/inner-text-doesn-t-r…] indexed:0 read:2min 2026-09-26 · —