mechanize
Version, currently master branch1 version
- master branchlatestOct 22, 2026
github.com/mamantoha/mechanize.cr
Mechanize.cr is Crystal implementation of Ruby's Mechanize. It makes automated web interaction easy, like scraping.
Installation
# Add this to your shard.yml
dependencies:
mechanize:
github: mamantoha/mechanize.cr
branch: mastermaster is a branch, not a release, so this tracks it rather than pinning a version.
Then run:
shards installshard.yml
- Crystal
1.0.0- License
- MIT
- Author
- Kanezoh
Dependencies
Runtime Dependencies
- lexbor*github: kostya/lexbor
- http_proxy*github: mamantoha/http_proxy
Development Dependencies
- kemal~> 1.3.0github: kemalcr/kemaldev
- webmock*github: manastech/webmock.cr, branch: masterdev
- kemal-basic-auth*github: kemalcr/kemal-basic-authdev
README
mechanize.cr
This project is inspired by Ruby's mechanize. The purpose is to cover all the features of original one.
Installation
-
Add the dependency to your
shard.yml:dependencies: mechanize: github: Kanezoh/mechanize.cr -
Run
shards install
Usage
GET request
require "mechanize"
agent = Mechanize.new
page = agent.get("http://example.com/")
puts page.code # => 200
puts page.body # => html
puts page.title # => Example Domain
POST request
You can also send post request with data.
require "mechanize"
agent = Mechanize.new
query = {"foo" => "foo_value", "bar" => "bar_value"}
page = agent.post("http://example.com/", query: query)
# => request body is foo=foo_value&bar=bar_value
add query params, request_headers
You can add any query parameters and headers to requests.
require "mechanize"
agent = Mechanize.new
agent.request_headers = HTTP::Headers{"Foo" => "Bar"}
params = {"hoge" => "hoge"}
page = agent.get("http://example.com/", params: params)
# The actual URL is http://example.com/?hoge=hoge
fill and submit form
You can fill and submit form by using field_with and submit. It enables you to scrape web pages requiring login.
require "mechanize"
agent = Mechanize.new
page = agent.get("#{web page contains login form}")
form = page.forms[0]
form.field_with("email").value = "tester@example.com"
form.field_with("password").value = "xxxxxx"
agent.submit(form)
agent.get("#{web page only logged-in users can see}"
search node
You can use css selector to search html nodes by using #css method.
This method is from lexbor, so if you want to explore more, please refer the repository.
puts page.css("h1").first.inner_text
Logging
For activation, simply setup the log to :debug level
Log.setup("mechanize", :debug)
Basic auth
You can access a page which is protected by basic auth, setting username and password for the url.
agent = Mechanize.new
agent.add_auth("http://example.com", "username", "password")
agent.get("http://example.com")
Contributing
- Fork it (https://github.com/Kanezoh/mechanize.cr/fork)
- Create your feature branch (
git checkout -b my-new-feature) - Commit your changes (
git commit -am 'Add some feature') - Push to the branch (
git push origin my-new-feature) - Create a new Pull Request
Contributors
Documentation
Built from the current release. The first visit to a release nobody has asked for starts its build.
Links
This branch
- Branch
master- Seen
- Oct 22, 2026
- Crystal
1.0.0- Indexed
- yes
Dependents
Repository
github.com/mamantoha/mechanize.cr
Metadata
- Created
- Oct 27, 2026
- Updated
- Nov 7, 2026
- Synced
- Nov 7, 2026
- Versions
- 1