Stack Exchange siteleri için Fanatik bir bot oluşturma


12

Bugün meydan okuma rozetleri hile etmektir!

Bir Stack Exchange sitesine bağlanacak bir bot oluşturacak, sizin gibi giriş yapacak, / sorular sayfasını ziyaret edecek, bir soru ziyaret edecek ve daha sonra "ilgili" kenar çubuğundaki diğer 9 soruyu ziyaret edeceksiniz (çünkü " etkinlik "olarak adlandırılır).

Bu bot, kullanıcıdan herhangi bir girdi veya işlem yapmadan günde bir kez bu işlemi gerçekleştirmelidir. Çalışmaya devam edebilmeli ve kullanıcı hiçbir zaman bilgisayara dokunmamalıdır ve ardışık gün sayısı artmaya devam edecektir. Siteyi "ziyaret ettikten" sonra "ziyaret edildi" yazmalıdır.

Kullanıcının Stack Exchange tarafından sağlanan OpenID kullandığını varsayacaksınız.

Programın girişi site URL'si, SE OpenID e-postası ve SE OpenID şifresi olacaktır. Örneğin:

/programming// doorknob@doorknob.doorknob password

Bunları istediğiniz şekilde girebilirsiniz.

Programınız en az aşağıdakiler için çalışmalıdır:

(Evrensel olduğundan emin olmak için.)

Bu , bu yüzden bayt içindeki en kısa kod kazanacak!


1
Etkinlik için yapmam gereken en az kullanıcı sayfamı ziyaret etmekti. Herhangi bir soru okumaya gerek yok. (Ancak bununla ilgili kuralları değiştirmeyin.)
Kendall Frey

4
Şükürler olsun ki meydan okuma, her gün 40 soru / cevap rastgele rastgele bir bot oluşturmak değildi.

1
Yığın değişiminin kapsamı düşünüldüğünde, bu sömürünün kullanılmasıyla ilgili bir soru sorulana kadar sadece bir zaman meselesiydi.
PyRulez

Yanıtlar:


11

Ruby, 456 karakter

require'mechanize'
s,*e=gets.split
a,o=Mechanize.new,'http://openid.stackexchange.com/'
a.agent.http.verify_mode=OpenSSL::SSL::VERIFY_NONE
l=a.get(o+'account/login').forms[0]
l.email,l.password=e
a.submit l,l.buttons[0]
g=a.get(s+'/users/login').forms.find{|f|f.action=='/users/authenticate'}
g.openid_identifier=o
a.submit g,g.buttons[-1]
loop{p=a.get s+'/questions'
10.times{p=p.links.find{|i|i.href=~/^\/questions\/\d/}.click}
puts'visited'
sleep 86400}

Ungolfed sürümü:

require 'mechanize'

site, email, password = gets.split

agent = Mechanize.new
agent.agent.http.verify_mode = OpenSSL::SSL::VERIFY_NONE

login_form = agent.get('http://openid.stackexchange.com/account/login').forms.first
login_form.email = email
login_form.password = password
agent.submit login_form, login_form.buttons.first
puts 'logged in with SE openid'

site_login_form = agent.get(site + '/users/login').forms.find {|form| form.action == '/users/authenticate' }
site_login_form.openid_identifier = 'http://openid.stackexchange.com/'
agent.submit site_login_form, site_login_form.buttons.last
puts 'logged in to site'

loop {
    page = agent.get(site + '/questions')
    10.times do page = page.links.find{|link| link.href =~ /^\/questions\/\d/ }.click; end
    puts 'visited'
    sleep 60 * 60 * 24
}

7
Github hesabınızdaki maksimum depolama alanını aştınız mı ve teknik özellikleriniz ve kaynak kodunuz için taşma depolama olarak Soru-Cevap StackExchange biçimini kullanmaya başladınız mı? ;-)
Jonathan Van Matre

1
@JonathanVanMatre, bekle, GitHub depolarında boyut sınırı var mı?
haykam
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.