スポンサー広告---------
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
過去_log_0-2014-01-04
てs。
------ FC2やlivedoorのブログへコメント投下 -------
SOCKSプロキシ・・・ ていうかtorをmechanizeに対応するのを想定
NSAの件もあるし、torの匿名性も過信はダメです



#coding:utf-8
require 'kconv'
require "yaml"
require "mechanize"
require "socksify"
require 'socksify/http'

# Mechanize: call @agent.set_socks(addr, port) before using
# any of it's methods; it might be working in other cases,
# but I just didn't tried :)

class Mechanize::HTTP::Agent
public
def set_socks addr, port
set_http unless @http
class << @http
attr_accessor :socks_addr, :socks_port
def http_class
Net::HTTP.SOCKSProxy(socks_addr, socks_port)
end
end
@http.socks_addr = addr
@http.socks_port = port
end
end
# --------------------------------------------------

SOCKS = true
ad = "http://yuyyuyyuyyu.blog.fc2.com/blog-entry-97.html"
rem = [
"にゃんにゃ" , 9 ,
"にゃわわ" , 4 ,
].each_slice(2).map do | a , b | [a] * b end.flatten

agent = Mechanize.new
agent.agent.set_socks('127.0.0.1', 9150) if SOCKS
agent.get ad
p ad
# p agent.page.forms
# 同じ名前のformが二重になってる時用の対策 ----------
f =
agent.page.forms.select do |m|
m.name == "comment_form"
end.last
p f

comment = rem.sample
if f.field_with(:name => "body")
p "live door"
f.body = comment
elsif f.field_with(:name => "comment[body]")
p "fc 2"
f.field_with(:name => "comment[body]").value = comment
f.field_with(:name => "comment[name]").value = "_"
end
f.click_button
p :submit
# puts agent.page.body




# -----------------------------

FC2もlivedoorもコメントフォームのname属性がcomment_formになってるから同じソースで途中までいける

で、BOT対策か何か知らないけど二重フォームにしてる場合がたまにあるので
agent.page.forms.select do |m|
m.name == "comment_form"
end.last
で一番後ろの取って、とりあえずの対応・・・ 本当はもう少し賢く探さないといけない

あとは、よくわかんないけど書き込めないブログが結構ある
js絡んでる気配がするから、watirでやんないと本格的なのは作れないかも

watirでやる場合は、
IEとかにtorのsocksプロキシを適用して、
そっから普通に書く
   0..
Name
comment

hibana
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。