Stack Exchange 사이트를위한 광신적 인 봇 만들기


12

오늘 당신의 도전은 배지를 속이는 것입니다!

Stack Exchange 사이트에 연결하고 로그인 한 다음 / questions 페이지를 방문하여 질문을 방문한 다음 "관련"추가 기사에서 9 개의 다른 질문을 방문하는 봇을 구축합니다 ( " 활동 "과 관련하여 표준화해야합니다).

이 봇은 사용자의 입력이나 조치없이 매일이 프로세스를 수행해야합니다. 컴퓨터를 계속 작동시킬 수 있어야하며 사용자가 컴퓨터를 절대로 만질 수 없어야하며 연속 일 수가 계속 증가합니다. 사이트를 "방문"한 후 "방문"을 인쇄해야합니다.

사용자가 Stack Exchange 제공 OpenID를 사용한다고 가정합니다.

프로그램의 입력은 사이트 URL, SE OpenID 이메일 및 SE OpenID 비밀번호입니다. 예를 들면 다음과 같습니다.

/programming// doorknob@doorknob.doorknob password

원하는대로 입력 할 수 있습니다.

귀하의 프로그램은 최소한 다음과 같이 작동해야합니다.

(그것이 보편적인지 확인하십시오.)

이것은 이므로 바이트 단위의 가장 짧은 코드가 이길 것입니다!


1
활동을 위해 필요한 최소한의 사용자 페이지를 방문했습니다. 질문을 읽을 필요가 없습니다. (그러나 이것으로 인해 규칙을 변경하지 마십시오.)
Kendall Frey

4
문제는 매일 40 개의 질문 / 답을 무작위로 다운 봇하는 봇을 만드는 것이 아니라는 점입니다.

1
스택 교환의 범위를 감안할 때, 그것을 악용하는 것에 대한 의문이 생길 때까지는 시간 문제였습니다.
PyRulez

답변:


11

루비, 456 자

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}

언 골프 버전 :

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 계정의 최대 저장소를 초과하고 사양 및 소스 코드의 오버플로 저장소로 Q & A StackExchange 형식을 사용하기 시작 했습니까? ;-)
Jonathan Van Matre

1
@JonathanVanMatre, 잠깐, GitHub 리포지토리에 크기 제한이 있습니까?
haykam
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.