def extract_form_fields(form_url):
payload = {
"url": form_url,
"async": False,
"settings": {
"record_request": False,
"actions": [
{
"type": "wait",
"selector": "form",
"timeout": 10000
},
{
"type": "parse_json",
"data_schema": {
"name": "FormFields",
"description": "Extract all form input fields",
"fields": [
{"type": "string", "name": "form_title", "description": "Form title"},
{
"type": "array",
"name": "fields",
"description": "List of all input fields",
"fields": [
{"type": "string", "name": "label", "description": "Field label"},
{"type": "string", "name": "field_name", "description": "Field name attribute"},
{"type": "string", "name": "field_type", "description": "Input type"},
{"type": "boolean", "name": "required", "description": "Is required?"},
{"type": "string", "name": "placeholder", "description": "Placeholder text"}
]
}
]
},
"instruction": "Extract all form fields with their properties",
"model": "gpt-4o-mini",
"output_type": "inline"
}
]
}
}
headers = {"X-API-Key": GAFFA_API_KEY, "Content-Type": "application/json"}
response = requests.post(GAFFA_API_URL, json=payload, headers=headers)
response.raise_for_status()
result = response.json()
for action in result["data"]["actions"]:
if action.get("type") == "parse_json":
return action["output"]
return None