Go to file
2022-11-04 14:34:42 +02:00
.github/workflows fix indent 2021-11-18 12:10:07 +09:00
spec fix unexpected behaviour when get uri with path and query parameter 2022-01-10 10:44:27 +09:00
src fix redundant use of Object#to_s in interpolation 2022-11-04 14:34:42 +02:00
.editorconfig First Commit 2021-04-19 13:50:12 +09:00
.gitignore First Commit 2021-04-19 13:50:12 +09:00
.travis.yml First Commit 2021-04-19 13:50:12 +09:00
LICENSE First Commit 2021-04-19 13:50:12 +09:00
README.md Update README.md 2022-01-24 21:25:58 +09:00
shard.yml bump kemal 2022-11-04 14:24:40 +02:00

mechanize.cr

Crystal CI

This project is inspired by Ruby's mechanize. The purpose is to cover all the features of original one.

API Documentation

Installation

  1. Add the dependency to your shard.yml:

    dependencies:
      mechanize:
        github: Kanezoh/mechanize.cr
    
  2. 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

  1. Fork it (https://github.com/Kanezoh/mechanize.cr/fork)
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request

Contributors