Detect date format from placeholder (MM/DD/YYYY) instead of label matching

Reads input placeholder in snapshot. If it contains MM/DD/YYYY pattern,
auto-fills with today's date in the correct format. Generic — works
regardless of the field label.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-06 15:05:41 -08:00
parent 7d81d59cb5
commit 3bf1786895

View File

@@ -198,14 +198,8 @@ export class FormFiller {
if (l.includes('salary') || l.includes('compensation') || l.includes('expected pay')) return String(p.desired_salary || '');
if (l.includes('minimum') && l.includes('salary')) return String(Math.round((p.desired_salary || DEFAULT_DESIRED_SALARY) * MINIMUM_SALARY_FACTOR));
// Dates — mm/dd/yyyy format for date fields
if (l.includes('start date') || l.includes('when can you start') || l.includes('available to start') || l.includes('earliest date') || l.includes('date available') || l.includes('date of application') || (l.includes('date') && !l.includes('update'))) {
const now = new Date();
const mm = String(now.getMonth() + 1).padStart(2, '0');
const dd = String(now.getDate()).padStart(2, '0');
const yyyy = now.getFullYear();
return `${mm}/${dd}/${yyyy}`;
}
// Dates
if (l.includes('start date') || l.includes('when can you start') || l.includes('available to start')) return 'Immediately';
if (l.includes('notice period')) return '2 weeks';
// Education
@@ -434,7 +428,7 @@ Answer:`;
if (!isVisible(inp)) return;
const tag = 'inp-' + (idx++);
inp.setAttribute('data-claw-idx', tag);
result.inputs.push({ tag, label: _extractLabel(inp), value: inp.value || '', required: _checkRequired(inp), type: inp.type });
result.inputs.push({ tag, label: _extractLabel(inp), value: inp.value || '', placeholder: inp.placeholder || '', required: _checkRequired(inp), type: inp.type });
});
// Textareas
@@ -564,6 +558,16 @@ Answer:`;
if (field.value?.trim()) continue;
if (this.isHoneypot(lbl)) return [{ label: lbl, honeypot: true }];
// Date fields — detect by placeholder format (e.g. "MM/DD/YYYY")
const ph = (field.placeholder || '').toUpperCase();
if (ph.includes('MM') && ph.includes('DD') && ph.includes('YYYY')) {
const now = new Date();
const dateStr = `${String(now.getMonth() + 1).padStart(2, '0')}/${String(now.getDate()).padStart(2, '0')}/${now.getFullYear()}`;
const el = await byTag(field.tag);
if (el) await el.fill(dateStr).catch(() => {});
continue;
}
let answer = this.answerFor(lbl);
if (!answer && field.required) {
answer = await this.aiAnswerFor(lbl);