Ruby Mechanize ile Web Otomasyonları #DevSecOps

Bunjo

Ar-Ge Ekibi Asistanı
14 Ara 2020
1,640
1,982
💎

6449ti9.gif

pDHFoUY.png


Merhabalar, ben Bunjo. Bu konuda Ruby'de bulunan Mechanize kütüphanesinin kullanımını anlatacağım.

pDHFoUY.png


Giriş ve Kurulum

Mechanize, Ruby ile web sayfalarına programatik olarak erişip etkileşim kurmanızı sağlar. Standart bir kütüphane değildir.

Bash:
gem install mechanize

komutu ile kurulumu yapabilirsiniz.

pDHFoUY.png


Basit Kullanım


Mechanize ile bir web sayfasına erişmek ve sayfanın içeriğini almak için aşağıdaki kodlar kullanılır.

Ruby:
require 'mechanize'

agent = Mechanize.new
page = agent.get('http://example.com')

puts page.title

Belirtilen uzantıya istek atılır ve daha sonrasına sayfa başlığı ekrana yazdırılır.

pDHFoUY.png


Sayfa İçeriği ve Elemanlarına Erişim

Belirli bir HTML elemanını bulmak için search metodunu kullanabilirsiniz.

Ruby:
require 'mechanize'

agent = Mechanize.new
page = agent.get('http://example.com')

# Belirli bir elemanı bulmak
header = page.search('h1').text
puts header

# Tüm bağlantıları bulmak
links = page.links
links.each do |link|
  puts link.text
end

pDHFoUY.png


Formlarla Çalışmak

Mechanize, web formlarını doldurup göndermek için kullanışlıdır. Formu bulup, doldurmalı ve formu göndermelisiniz.

Ruby:
require 'mechanize'

agent = Mechanize.new
page = agent.get('http://example.com/login')

# Formu bulmak
form = page.form_with(action: '/login')

# Form alanlarını doldurmak
form.field_with(name: 'username').value = 'myusername'
form.field_with(name: 'password').value = 'mypassword'

# Formu göndermek
page = form.submit

puts page.title

Sayfa üzerinde bir formu bulmak için form_with metotu kullanılır. Bulunan bu formu bir veri ile doldurmak içinse field_with metotu kullanılır.

pDHFoUY.png


Oturum Yönetimi ve Çerezler

Mechanize, oturum yönetimini otomatik olarak sağlar. Bir oturumda, oturum bilgileri ve çerezler saklanır,
bu sayede bir oturum boyunca yapılan istekler arasında oturum devamlılığı sağlanır.

Ruby:
require 'mechanize'

agent = Mechanize.new

# İlk istek: oturum başlatma
login_page = agent.get('http://example.com/login')

# Giriş formunu doldurup gönderme
login_form = login_page.form_with(action: '/login')
login_form.field_with(name: 'username').value = 'myusername'
login_form.field_with(name: 'password').value = 'mypassword'
dashboard_page = login_form.submit

# Oturum devam ettirme: dashboard sayfasına erişim
profile_page = agent.get('http://example.com/profile')
puts profile_page.title

Çerezleri Görüntüleme

Sayfa isteği attıktan sonra size tanımlanan cookie değerlerini bu şekilde çıkartabilirsiniz.

Ruby:
require 'mechanize'

agent = Mechanize.new

# Bir sayfaya erişim
agent.get('http://example.com')

# Çerezleri görüntüleme
agent.cookie_jar.each do |cookie|
  puts "Cookie: #{cookie.name} = #{cookie.value}"
end

Çerez Ekleme

Manuel olarak bir cookie ekleyebilirsiniz.

Ruby:
require 'mechanize'

agent = Mechanize.new

# Bir sayfaya erişim
agent.get('http://example.com')

# Çerez ekleme
cookie = Mechanize::Cookie.new('my_cookie', 'cookie_value')
cookie.domain = 'example.com'
cookie.path = '/'
agent.cookie_jar.add(cookie)

# Çerezleri kontrol etme
agent.cookie_jar.each do |cookie|
  puts "Cookie: #{cookie.name} = #{cookie.value}"
end

Çerez Silme

Belirli bir çerezi veya tüm çerezleri silebilirsiniz.

Ruby:
require 'mechanize'

agent = Mechanize.new

# Bir sayfaya erişim
agent.get('http://example.com')

# Tüm çerezleri silme
agent.cookie_jar.clear

# Çerezleri kontrol etme (hiçbir çerez olmamalı)
puts agent.cookie_jar.inspect

Çerezlerin Kaydedilmesi ve Yüklenmesi

Çerezleri bir dosyaya kaydedip daha sonra bu dosyadan yükleyebilirsiniz. Bu, oturumları sürdürmek için faydalıdır.

Ruby:
require 'mechanize'

agent = Mechanize.new

# Bir sayfaya erişim
agent.get('http://example.com')

# Çerezleri bir dosyaya kaydetme
agent.cookie_jar.save_as('cookies.yml', session: true, format: :yaml)

Çerezleri bir dosyadan yüklemek için load metodunu kullanabilirsiniz.

Ruby:
require 'mechanize'

agent = Mechanize.new

# Çerezleri dosyadan yükleme
agent.cookie_jar.load('cookies.yml')

# Oturum devam ettirme: çerezlerle korunan bir sayfaya erişim
page = agent.get('http://example.com/profile')
puts page.title


pDHFoUY.png


Yönlendirmeleri ve Hataları Yönetmek

Mechanize, otomatik yönlendirmeleri ve HTTP hatalarını yönetir. Yönlendirmeleri kapatabilir veya hataları özel olarak ele alabilirsiniz.
Ruby:
agent = Mechanize.new
agent.redirect_ok = false  # Yönlendirmeleri kapatmak

Hataları Yönetmek
Ruby:
begin
  page = agent.get('http://example.com/nonexistent')
rescue Mechanize::ResponseCodeError => e
  puts "Hata: #{e.response_code}"
end


pDHFoUY.png


Dosya İndirme

Bir URL'den dosya indirip yerel diskte bir dosyaya kaydedebilirsiniz.
Ruby:
require 'mechanize'

agent = Mechanize.new
agent.get('http://example.com/dosya.zip').save('dosya.zip')


pDHFoUY.png


Kullanıcı Aracısı ve Başlıkları Değiştirmek

Web isteklerinizin kullanıcı aracısını veya başlıklarını değiştirmek için user_agent ve request_headers ayarlarını kullanabilirsiniz.
Ruby:
require 'mechanize'

agent = Mechanize.new
agent.user_agent_alias = 'Windows Chrome'
agent.request_headers = { "Accept-Language" => "en-US,en;q=0.9" }

page = agent.get('http://example.com')
puts page.title

pDHFoUY.png


Proxy Bilgilerini Ayarlama

Bir proxy sunucusu kullanmak için agent nesnesinin set_proxy metodunu kullanabilirsiniz.
Ruby:
require 'mechanize'

agent = Mechanize.new

# Proxy bilgilerini ayarlama
proxy_address = 'proxy.example.com'
proxy_port = 8080
agent.set_proxy(proxy_address, proxy_port)

# Web sayfasına istek gönderme
page = agent.get('http://example.com')
puts page.title

Kullanıcı Adı ve Şifre Gerektiren Proxy

Bazı proxy sunucuları kimlik doğrulama gerektirir. Bu durumda, set_proxy metoduna kullanıcı adı ve şifre bilgilerini de ekleyebilirsiniz.

Ruby:
require 'mechanize'

agent = Mechanize.new

# Proxy bilgilerini ayarlama
proxy_address = 'proxy.example.com'
proxy_port = 8080
proxy_user = 'username'
proxy_pass = 'password'
agent.set_proxy(proxy_address, proxy_port, proxy_user, proxy_pass)

# Web sayfasına istek gönderme
page = agent.get('http://example.com')
puts page.title


pDHFoUY.png


Konudaki kodlar temsilidir.

Daha fazlası için doküman.



 

teux

Ar-Ge Ekibi Asistanı
23 Ocak 2023
979
1,490

6449ti9.gif

pDHFoUY.png


Merhabalar, ben Bunjo. Bu konuda Ruby'de bulunan Mechanize kütüphanesinin kullanımını anlatacağım.

pDHFoUY.png


Giriş ve Kurulum

Mechanize, Ruby ile web sayfalarına programatik olarak erişip etkileşim kurmanızı sağlar. Standart bir kütüphane değildir.

Bash:
gem install mechanize

komutu ile kurulumu yapabilirsiniz.

pDHFoUY.png


Basit Kullanım


Mechanize ile bir web sayfasına erişmek ve sayfanın içeriğini almak için aşağıdaki kodlar kullanılır.

Ruby:
require 'mechanize'

agent = Mechanize.new
page = agent.get('http://example.com')

puts page.title

Belirtilen uzantıya istek atılır ve daha sonrasına sayfa başlığı ekrana yazdırılır.

pDHFoUY.png


Sayfa İçeriği ve Elemanlarına Erişim

Belirli bir HTML elemanını bulmak için search metodunu kullanabilirsiniz.

Ruby:
require 'mechanize'

agent = Mechanize.new
page = agent.get('http://example.com')

# Belirli bir elemanı bulmak
header = page.search('h1').text
puts header

# Tüm bağlantıları bulmak
links = page.links
links.each do |link|
  puts link.text
end

pDHFoUY.png


Formlarla Çalışmak

Mechanize, web formlarını doldurup göndermek için kullanışlıdır. Formu bulup, doldurmalı ve formu göndermelisiniz.

Ruby:
require 'mechanize'

agent = Mechanize.new
page = agent.get('http://example.com/login')

# Formu bulmak
form = page.form_with(action: '/login')

# Form alanlarını doldurmak
form.field_with(name: 'username').value = 'myusername'
form.field_with(name: 'password').value = 'mypassword'

# Formu göndermek
page = form.submit

puts page.title

Sayfa üzerinde bir formu bulmak için form_with metotu kullanılır. Bulunan bu formu bir veri ile doldurmak içinse field_with metotu kullanılır.

pDHFoUY.png


Oturum Yönetimi ve Çerezler

Mechanize, oturum yönetimini otomatik olarak sağlar. Bir oturumda, oturum bilgileri ve çerezler saklanır,
bu sayede bir oturum boyunca yapılan istekler arasında oturum devamlılığı sağlanır.

Ruby:
require 'mechanize'

agent = Mechanize.new

# İlk istek: oturum başlatma
login_page = agent.get('http://example.com/login')

# Giriş formunu doldurup gönderme
login_form = login_page.form_with(action: '/login')
login_form.field_with(name: 'username').value = 'myusername'
login_form.field_with(name: 'password').value = 'mypassword'
dashboard_page = login_form.submit

# Oturum devam ettirme: dashboard sayfasına erişim
profile_page = agent.get('http://example.com/profile')
puts profile_page.title

Çerezleri Görüntüleme

Sayfa isteği attıktan sonra size tanımlanan cookie değerlerini bu şekilde çıkartabilirsiniz.

Ruby:
require 'mechanize'

agent = Mechanize.new

# Bir sayfaya erişim
agent.get('http://example.com')

# Çerezleri görüntüleme
agent.cookie_jar.each do |cookie|
  puts "Cookie: #{cookie.name} = #{cookie.value}"
end

Çerez Ekleme

Manuel olarak bir cookie ekleyebilirsiniz.

Ruby:
require 'mechanize'

agent = Mechanize.new

# Bir sayfaya erişim
agent.get('http://example.com')

# Çerez ekleme
cookie = Mechanize::Cookie.new('my_cookie', 'cookie_value')
cookie.domain = 'example.com'
cookie.path = '/'
agent.cookie_jar.add(cookie)

# Çerezleri kontrol etme
agent.cookie_jar.each do |cookie|
  puts "Cookie: #{cookie.name} = #{cookie.value}"
end

Çerez Silme

Belirli bir çerezi veya tüm çerezleri silebilirsiniz.

Ruby:
require 'mechanize'

agent = Mechanize.new

# Bir sayfaya erişim
agent.get('http://example.com')

# Tüm çerezleri silme
agent.cookie_jar.clear

# Çerezleri kontrol etme (hiçbir çerez olmamalı)
puts agent.cookie_jar.inspect

Çerezlerin Kaydedilmesi ve Yüklenmesi

Çerezleri bir dosyaya kaydedip daha sonra bu dosyadan yükleyebilirsiniz. Bu, oturumları sürdürmek için faydalıdır.

Ruby:
require 'mechanize'

agent = Mechanize.new

# Bir sayfaya erişim
agent.get('http://example.com')

# Çerezleri bir dosyaya kaydetme
agent.cookie_jar.save_as('cookies.yml', session: true, format: :yaml)

Çerezleri bir dosyadan yüklemek için load metodunu kullanabilirsiniz.

Ruby:
require 'mechanize'

agent = Mechanize.new

# Çerezleri dosyadan yükleme
agent.cookie_jar.load('cookies.yml')

# Oturum devam ettirme: çerezlerle korunan bir sayfaya erişim
page = agent.get('http://example.com/profile')
puts page.title


pDHFoUY.png


Yönlendirmeleri ve Hataları Yönetmek

Mechanize, otomatik yönlendirmeleri ve HTTP hatalarını yönetir. Yönlendirmeleri kapatabilir veya hataları özel olarak ele alabilirsiniz.
Ruby:
agent = Mechanize.new
agent.redirect_ok = false  # Yönlendirmeleri kapatmak

Hataları Yönetmek
Ruby:
begin
  page = agent.get('http://example.com/nonexistent')
rescue Mechanize::ResponseCodeError => e
  puts "Hata: #{e.response_code}"
end


pDHFoUY.png


Dosya İndirme

Bir URL'den dosya indirip yerel diskte bir dosyaya kaydedebilirsiniz.
Ruby:
require 'mechanize'

agent = Mechanize.new
agent.get('http://example.com/dosya.zip').save('dosya.zip')


pDHFoUY.png


Kullanıcı Aracısı ve Başlıkları Değiştirmek

Web isteklerinizin kullanıcı aracısını veya başlıklarını değiştirmek için user_agent ve request_headers ayarlarını kullanabilirsiniz.
Ruby:
require 'mechanize'

agent = Mechanize.new
agent.user_agent_alias = 'Windows Chrome'
agent.request_headers = { "Accept-Language" => "en-US,en;q=0.9" }

page = agent.get('http://example.com')
puts page.title

pDHFoUY.png


Proxy Bilgilerini Ayarlama

Bir proxy sunucusu kullanmak için agent nesnesinin set_proxy metodunu kullanabilirsiniz.
Ruby:
require 'mechanize'

agent = Mechanize.new

# Proxy bilgilerini ayarlama
proxy_address = 'proxy.example.com'
proxy_port = 8080
agent.set_proxy(proxy_address, proxy_port)

# Web sayfasına istek gönderme
page = agent.get('http://example.com')
puts page.title

Kullanıcı Adı ve Şifre Gerektiren Proxy

Bazı proxy sunucuları kimlik doğrulama gerektirir. Bu durumda, set_proxy metoduna kullanıcı adı ve şifre bilgilerini de ekleyebilirsiniz.

Ruby:
require 'mechanize'

agent = Mechanize.new

# Proxy bilgilerini ayarlama
proxy_address = 'proxy.example.com'
proxy_port = 8080
proxy_user = 'username'
proxy_pass = 'password'
agent.set_proxy(proxy_address, proxy_port, proxy_user, proxy_pass)

# Web sayfasına istek gönderme
page = agent.get('http://example.com')
puts page.title


pDHFoUY.png


Konudaki kodlar temsilidir.

Daha fazlası için doküman.



++
 

KaptanTR

Administrator
17 Nis 2015
1,702
1,814
Ek;

Mechanize ve Selenium, web sayfalarını otomatikleştirmek için kullanılan iki farklı araçtır:

Mechanize:

  • Kapsam: Daha basit ve hızlıdır, temel HTML formlarını doldurmak ve verileri kazımak için uygundur.
  • Kullanım Alanı: Statik içerikli ve JavaScript gerektirmeyen web siteleri için idealdir.
  • Performans: Hafiftir ve daha az kaynak tüketir.
Selenium:
  • Kapsam: Daha kapsamlıdır ve tam bir web tarayıcısını kontrol eder, bu nedenle JavaScript ve dinamik içerik işleyebilir.
  • Kullanım Alanı: Karmaşık ve etkileşimli web uygulamalarında kullanılır.
  • Performans: Daha ağırdır ve daha fazla kaynak tüketir.
Özetle, ihtiyaçlarınıza bağlı olarak her iki aracın da avantajları ve dezavantajları vardır.


Eline sağlık, güzel içerik. :)
 

Bunjo

Ar-Ge Ekibi Asistanı
14 Ara 2020
1,640
1,982
💎
Ellerine saglik kardeşim :)
Ek;

Mechanize ve Selenium, web sayfalarını otomatikleştirmek için kullanılan iki farklı araçtır:

Mechanize:

  • Kapsam: Daha basit ve hızlıdır, temel HTML formlarını doldurmak ve verileri kazımak için uygundur.
  • Kullanım Alanı: Statik içerikli ve JavaScript gerektirmeyen web siteleri için idealdir.
  • Performans: Hafiftir ve daha az kaynak tüketir.
Selenium:
  • Kapsam: Daha kapsamlıdır ve tam bir web tarayıcısını kontrol eder, bu nedenle JavaScript ve dinamik içerik işleyebilir.
  • Kullanım Alanı: Karmaşık ve etkileşimli web uygulamalarında kullanılır.
  • Performans: Daha ağırdır ve daha fazla kaynak tüketir.
Özetle, ihtiyaçlarınıza bağlı olarak her iki aracın da avantajları ve dezavantajları vardır.


Eline sağlık, güzel içerik. :)
Güzel yorumlarınız için çok teşekkür ederim :)
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.