【無料】instagramで相互フォローか確認するやつ作りました
※seleniumを始めたい方向けにruby + selenium webdriverチュートリアルという記事もあります。
こんにちわ。合同会社ベステンダンク代表の大浦です。
世間は年の瀬丸出しですね。ワクワクが止まりません。
インスタって相互フォローなのかどうかわかりづらいんですよね。
誰をフォローしてんだかわかんなくなりました。
というわけで片想い状態のアカウントをテキストファイルに出力するやつをseleniumでちょちょいって作りました。
かなり不安定な出来なのですが、これ以上時間かけられないので許してください。無料だし。
修正した安定版を誰かがうpしてくれることを期待しています。
構成はこんな感じ
・windows 10
・ruby 2.3.3
・chromedriver最新
・selenium-webdriver最新
instagramはめちゃめちゃソースの変更があるので、明日には使えなくなるかもしれません。
class名とかのメンテナンスはご自分で行ってくださいね。
環境構築は私のブログに書いてあります。ご参考にどうぞ。
windowsならruby + selenium webdriverも環境設定は15分で終わる | katsulog
require 'selenium-webdriver'
account = ["ログインIDを入力", "パスワードを入力"]
user_id = "ユーザーIDを入力"
@d = Selenium::WebDriver.for :chrome
@wait = Selenium::WebDriver::Wait.new(:read_timeout => 120)
# ログイン
def login(account)
@d.get("https://www.instagram.com/accounts/login/")
@wait.until{ @d.find_elements(:name, 'username').size > 0 }
@d.find_element(:name, 'username').clear
@d.find_element(:name, 'username').send_keys(account[0])
@d.find_element(:name, 'password').clear
@d.find_element(:name, 'password').send_keys(account[1])
@d.find_element(:xpath, '//*[@class="_0mzm- sqdOP L3NKy "]').click
@wait.until{ @d.find_elements(:xpath, '/html/body/div[3]/div/div').size > 0 }
end
# 自分がフォローしてるアカウントのURLを取りにいく
def get_follow_user(user_id)
@d.get("https://www.instagram.com/#{user_id}")
@d.find_element(:xpath, '//*[@id="react-root"]/section/main/div/header/section/ul/li[3]/a').click
@wait.until{ @d.find_elements(:xpath, '//*[@class="_7UhW9 xLCgt MMzan _0PwGv fDxYl "]').size > 0 }
# 一番下までスクロール
loop do
before_page = @d.page_source
begin
@d.find_elements(:xpath, '//*[@class="_7UhW9 xLCgt MMzan _0PwGv fDxYl "]').last.click
rescue
@d.find_elements(:class, 'wo9IH').last.click
end
sleep 0.5
if before_page == @d.page_source
break
end
sleep 0.5
end
# アカウントのURL取得
links = []
@d.find_elements(:xpath, '//*[@class="FPmhX notranslate _0imsa "]').each do |user|
links << user.attribute("href")
end
return links
end
# それぞれのアカウントを見に行ってフォローされてるかチェック
def check_follow(links)
links.each do |url|
flag = ""
puts url
@d.get(url)
begin
@wait.until{ @d.find_elements(:xpath, '//*[@id="react-root"]/section/main/div/header/section/ul/li[3]/a').size > 0 }
rescue
next
end
@d.find_element(:xpath, '//*[@id="react-root"]/section/main/div/header/section/ul/li[3]/a').click
begin
@wait.until{ @d.find_elements(:xpath, '//*[@class="_7UhW9 xLCgt MMzan _0PwGv fDxYl "]').size > 0 }
rescue
end
if @d.find_element(:xpath, '//*[@class="isgrP"]').text.include?("フォローしている人")
next
end
before_url = @d.current_url
# 一番下までスクロール
loop do
sleep 2
before_page = @d.page_source
if @d.current_url != before_url
break
end
begin
begin
@d.find_elements(:class, 'wFPL8 ').last.click
rescue
@d.find_elements(:class, 'wo9IH').last.click
end
rescue
@d.find_elements(:xpath, '//*[@class="_7UhW9 xLCgt MMzan _0PwGv fDxYl "]').last.click
end
begin
if @d.current_url != before_url
break
end
if @d.find_element(:xpath, '//*[@class="isgrP"]').text.include?("\nおすすめ\n")
begin
@d.find_elements(:xpath, '//*[@class="_7UhW9 xLCgt MMzan _0PwGv fDxYl "]').each do |row|
row.click
# sleep 0.1
end
rescue
begin
@d.find_elements(:class, 'wo9IH').each do |row|
row.click
# sleep 0.1
end
rescue
retry
end
end
end
rescue
retry
end
sleep 0.5
if before_page == @d.page_source
break
end
end
if @d.find_elements(:xpath, '//*[@class="_7UhW9 xLCgt MMzan _0PwGv fDxYl "]').size > 0
@d.find_elements(:xpath, '//*[@class="_7UhW9 xLCgt MMzan _0PwGv fDxYl "]').each do |user|
if user.find_elements(:xpath, '//*[@class="_0mzm- sqdOP L3NKy "]').size == 0
flag = "follow"
break
end
end
elsif @d.find_elements(:class, 'wo9IH').size > 0
begin
@d.find_elements(:class, 'wo9IH').each do |user|
if user.find_elements(:class, "_0mzm-").size == 0
flag = "follow"
break
end
end
rescue
retry
end
end
# フォローされてなかったら出力
if flag != "follow"
File.open("unilateral_follo_list.txt", "a") do |file|
file << url + "\n"
end
end
end
end
login(account)
links = get_follow_user(user_id)
check_follow(links)
@d.quit
です。
インスタに限らずこんな感じのものなら作れるのでお声がけください。
もちろん代金はいただきますけど。。
質問あればコメントいただければと思います。
では温かい年末年始をお過ごしくださいませ。