Buat bot Fanatic untuk situs Stack Exchange

12

Tantangan Anda hari ini adalah menipu di lencana!

Anda akan membangun bot yang akan terhubung ke situs Stack Exchange, masuk saat Anda, kunjungi halaman / pertanyaan, kunjungi pertanyaan, dan kemudian kunjungi 9 pertanyaan lain di sidebar "terkait" (karena itu tampaknya cukup untuk dihitung sebagai " aktivitas, "dan saya perlu membakukan sesuatu).

Bot ini harus melalui proses ini sekali setiap hari, tanpa input atau tindakan dari pengguna. Itu harus dapat dibiarkan berjalan, dan pengguna harus tidak pernah bisa menyentuh komputer, dan jumlah hari berturut-turut masih akan bertambah. Setelah "mengunjungi" situs tersebut, ia harus mencetak "dikunjungi".

Anda akan menganggap bahwa pengguna menggunakan OpenID yang disediakan Stack Exchange.

Input dari program ini adalah URL situs, email SE OpenID, dan kata sandi SE OpenID. Sebagai contoh:

/programming// [email protected] password

Anda dapat memasukkan ini sesuai keinginan Anda.

Program Anda harus bekerja untuk minimum:

(Hanya untuk memastikan itu universal.)

Ini adalah , jadi kode terpendek dalam byte akan menang!

Gagang pintu
sumber
1
Minimum yang harus saya lakukan untuk aktivitas adalah mengunjungi halaman pengguna saya. Tidak perlu membaca pertanyaan apa pun. (Tapi jangan ubah aturan karena ini.)
Kendall Frey
4
Syukurlah tantangannya bukan untuk membuat bot yang secara acak menurunkan 40 pertanyaan / jawaban setiap hari.
1
Mengingat cakupan pertukaran stack, itu hanya masalah waktu sampai ada pertanyaan tentang mengeksploitasinya.
PyRulez

Jawaban:

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}

Versi tidak disatukan:

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
}
Gagang pintu
sumber
7
Apakah Anda melebihi penyimpanan maksimum pada akun Github Anda dan mulai menggunakan format Q&A StackExchange sebagai penyimpanan overflow untuk spesifikasi dan kode sumber Anda? ;-)
Jonathan Van Matre
1
@JonathanVanMatre, tunggu, ada batasan ukuran pada repositori GitHub?
haykam