Install any skill in seconds. Free to start, no credit card required.
Get Started Free →jumodada/turnstile-testing
Use when verifying that a Cloudflare Turnstile widget (or a page embedding one) can be solved through the drissionpage-mcp browser tools — covers Cloudflare's official test sitekeys (visible/invisible, always-pass/always-fail, forced-interactive-challenge), production sites like nowsecure.nl, and pages that wrap the widget in a CSS 3D transform. Includes the coordinate-click technique, how to compute click points from element_state_get, and the one scenario coordinate clicks genuinely cannot sol
Passed 19 of 22 test cases with the skill, and 10 of 22 without it.
and 12 more in the full report
9 fixed10 passed either way3 still failing0 broke
Tokens, turns and time describe resource use, not a dollar price.
One of 9 test cases the skill fixed. Same model, same prompt, with and without the skill.
Which sitekey should be deployed to test negative handling on invisible challenges, and how many click actions should be dispatched to the widget area?
| Checked | Without skill | With skill |
|---|---|---|
| Specifies sitekey 2x00000000000000000000BB | Missed | Passed |
| Performs zero checkbox clicks | Passed | Passed |
The instructions your model reads when the skill loads.
Turnstile is a workflow composed from generic MCP tools. Keep provider-specific selection, click offsets, retries, and callback interpretation in this Skill; do not add a Turnstile-only tool to the MCP core. Use production targets only when the operator is authorized to complete their challenge.
Turnstile normally renders in a cross-origin iframe from
challenges.cloudflare.com. That origin boundary does not determine the
available DrissionPage capability by itself:
frame_list reports boundary and document_access. When
document_access=readable, frame_snapshot and frame_find can inspect the
OOPIF through the supported DrissionPage bridge.document_access=outer_only still supports outer iframe geometry and
presentation evidence through element_state_get.element_state_get still find
the widget. Treat that as a discovery-path difference, not proof that the
widget is absent.page_click_xy consumes top-level viewport CSS coordinates. Only use a rect
whose viewport_coordinate_space is top_level_viewport.page_navigate, resize if the fixture requires a fixed viewport, and
wait for the parent page to report pending, interactive, passed, or
failed. Record this pre-action status without recording the token value.frame_list. If it is not enumerated, use
wait_for_element with a specific selector such as
iframe[src*='challenges.cloudflare.com'].element_state_get for the resolved iframe and inspect
rect.viewport_coordinate_space plus
presentation.coordinate_actionability.
ready: continue with the current viewport box.test cases passed, vs 10 / 22 without
More skills from the same source and nearby in the registry, with their headline benchmark lift.