Tạo một bot Fanatic cho các trang web Stack Exchange


12

Thử thách của bạn hôm nay là gian lận tại các huy hiệu!

Bạn sẽ xây dựng một bot sẽ kết nối với trang web Stack Exchange, đăng nhập khi bạn truy cập trang / câu hỏi, truy cập một câu hỏi và sau đó truy cập 9 câu hỏi khác trong thanh bên "có liên quan" (vì điều đó dường như đủ để tính là " hoạt động, "và tôi cần chuẩn hóa một cái gì đó).

Bot này phải trải qua quá trình này một lần mỗi ngày, mà không có bất kỳ đầu vào hoặc hành động nào từ người dùng. Nó sẽ có thể được chạy liên tục và người dùng sẽ không bao giờ chạm vào máy tính và số ngày liên tiếp sẽ vẫn tăng. Sau khi "truy cập" trang web, nó phải in "đã truy cập".

Bạn sẽ cho rằng người dùng đang sử dụng OpenID do Stack Exchange cung cấp.

Đầu vào của chương trình sẽ là URL trang web, email SE OpenID và mật khẩu SE OpenID. Ví dụ:

/programming// doorknob@doorknob.doorknob password

Bạn có thể nhập những cái này theo cách bạn muốn.

Chương trình của bạn phải hoạt động tối thiểu là:

(Chỉ để đảm bảo rằng nó là phổ quát.)

Đây là , vì vậy mã ngắn nhất tính bằng byte sẽ giành chiến thắng!


1
Tối thiểu tôi cần để làm cho hoạt động là truy cập trang người dùng của tôi. Không cần phải đọc bất kỳ câu hỏi. (Nhưng đừng thay đổi các quy tắc về tài khoản này.)
Kendall Frey

4
Cảm ơn chúa, thử thách đã không tạo ra một bot ngẫu nhiên hạ gục 40 câu hỏi / câu trả lời mỗi ngày.

1
Với phạm vi trao đổi ngăn xếp, vấn đề chỉ là thời gian cho đến khi có một câu hỏi về việc khai thác nó.
PyRulez

Câu trả lời:


11

Ruby, 456 ký tự

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}

Phiên bản bị đánh cắp:

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
Bạn đã vượt quá dung lượng lưu trữ tối đa trên tài khoản Github của mình và bắt đầu sử dụng định dạng Q & A StackExchange dưới dạng lưu trữ tràn cho thông số kỹ thuật và mã nguồn của bạn? ;-)
Jonathan Van Matre

1
@JonathanVanMatre, đợi đã, có giới hạn kích thước đối với kho GitHub không?
haykam
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.