LLM-powered web automation library with autonomous agents
Project description
webtask
Easy-to-use LLM-powered browser automation — from autonomous tasks to element-level control.
Why webtask?
- Natural language tasks:
agent.do("add 3 items to cart") - Natural language selectors:
agent.select("the search input")
See Features for more.
Demo
await agent.do("add 3 Flat-Head Wood Screws to the cart")
Quick Start
Install webtask and Playwright:
pip install pywebtask
playwright install chromium
Then run your first automation:
from webtask import Webtask
from webtask.integrations.llm import Gemini
wt = Webtask()
agent = await wt.create_agent(
llm=Gemini(model="gemini-2.5-flash"),
wait_after_action=1.0,
)
await agent.goto("https://practicesoftwaretesting.com")
await agent.wait(3)
# select: pick elements with natural language
search = await agent.select("the search input")
await search.fill("pliers")
# do: simple or complex tasks — agent figures out the steps
await agent.do("click search and add the first product to cart")
# extract: get structured data from the page
price = await agent.extract("the cart total price")
# verify: check conditions
assert await agent.verify("cart has 1 item")
Features
Four core operations
await agent.do("click search and add first product to cart") # Autonomous tasks
element = await agent.select("the search input") # Element selection
data = await agent.extract("the cart total", MySchema) # Data extraction
assert await agent.verify("cart has 1 item") # Verification
Stateful agents — Agent remembers context across tasks
await agent.do("Add pliers to cart")
await agent.do("Add a hammer too") # Remembers previous action
agent.clear_history() # Reset when needed
Two modes — DOM-based or pixel-based interaction
agent = await wt.create_agent(llm=llm, mode="dom") # Element IDs (default)
agent = await wt.create_agent(llm=llm, mode="pixel") # Screen coordinates
Browser integration — Works with new or existing browsers
agent = await wt.create_agent(llm=llm) # New browser
agent = await wt.create_agent_with_browser(llm=llm, browser=browser) # Existing browser
agent = wt.create_agent_with_context(llm=llm, context=context) # Existing context
agent = wt.create_agent_with_page(llm=llm, page=page) # Existing page
Error handling — Handle task failures gracefully
try:
await agent.do("Add item to cart")
except TaskAbortedError as e:
print(f"Task failed: {e}")
When to use webtask?
Use webtask when you know what you want to automate but don't want to deal with how (finding selectors, handling dynamic DOM, etc.).
Not ideal for:
- High-volume scraping (use Scrapy, requests)
- Fully autonomous agents for complex, open-ended tasks
Supported LLMs
from webtask.integrations.llm import Gemini, GeminiComputerUse, Bedrock
Gemini(model="gemini-2.5-flash") # 2.5 Flash
GeminiComputerUse(model="gemini-2.5-computer-use-preview") # Visual mode
Bedrock(model="anthropic.claude-sonnet-4-20250514-v1:0") # Claude 4 Sonnet (WIP)
You can also use your own LLM by implementing the LLM interface. See the custom LLM guide.
Links
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pywebtask-0.27.0.tar.gz.
File metadata
- Download URL: pywebtask-0.27.0.tar.gz
- Upload date:
- Size: 67.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3a7ae8f31fc466166a252fffb80f114476b9f670fb78c1926689f675b74bb950
|
|
| MD5 |
7aa9afe0ca2f7b3abac3cb0b0e8c88f0
|
|
| BLAKE2b-256 |
a2614f4f41c704c24ecbfe6319b65f5de70e4faf2d589b4d5a6dd1c44237020b
|
Provenance
The following attestation bundles were made for pywebtask-0.27.0.tar.gz:
Publisher:
publish.yml on steve-z-wang/webtask
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pywebtask-0.27.0.tar.gz -
Subject digest:
3a7ae8f31fc466166a252fffb80f114476b9f670fb78c1926689f675b74bb950 - Sigstore transparency entry: 763073754
- Sigstore integration time:
-
Permalink:
steve-z-wang/webtask@72d3386f9a0bf6e13094bbe0c0dc536b18780634 -
Branch / Tag:
refs/tags/v0.27.0 - Owner: https://github.com/steve-z-wang
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@72d3386f9a0bf6e13094bbe0c0dc536b18780634 -
Trigger Event:
release
-
Statement type:
File details
Details for the file pywebtask-0.27.0-py3-none-any.whl.
File metadata
- Download URL: pywebtask-0.27.0-py3-none-any.whl
- Upload date:
- Size: 98.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
85d141d8f464e729ab7b75a54c8042cc67d3536e4d2e856c68ad80e004c46fb4
|
|
| MD5 |
561d1857737ceca00e68694b5aa26656
|
|
| BLAKE2b-256 |
2bd8099d3ccc303ef6ac3de89d84678fd042aa915c8a53f2c75e605f9fc73414
|
Provenance
The following attestation bundles were made for pywebtask-0.27.0-py3-none-any.whl:
Publisher:
publish.yml on steve-z-wang/webtask
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pywebtask-0.27.0-py3-none-any.whl -
Subject digest:
85d141d8f464e729ab7b75a54c8042cc67d3536e4d2e856c68ad80e004c46fb4 - Sigstore transparency entry: 763073755
- Sigstore integration time:
-
Permalink:
steve-z-wang/webtask@72d3386f9a0bf6e13094bbe0c0dc536b18780634 -
Branch / Tag:
refs/tags/v0.27.0 - Owner: https://github.com/steve-z-wang
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@72d3386f9a0bf6e13094bbe0c0dc536b18780634 -
Trigger Event:
release
-
Statement type: