前提・実現したいこと
PythonでInstagramの自動いいねのシステムを作成しています.
tkinterでGUIに自動いいねのコードを紐づけようとしています.
発生している問題・エラーメッセージ
コード自体にエラーは出ないのですが,実行するとInstagramのホームページが開かず「data:,」と記載されたリンクのページが出てきてしまいます.
該当のソースコード
from selenium import webdriver from selenium.common.exceptions import WebDriverException from selenium.webdriver.common.action_chains import ActionChains import time import datetime import tkinter import instagram_nice import chromedriver_binary #Startを押した時の動作 def start(): # いいねの動きに対するパラメータ #ログインIDの指定 if loginId_txt.get() != '': username = loginId_txt.get() else: print('Login IDが入力されていません。') return #パスワードの指定 if password_txt.get() != '': password = password_txt.get() else: print('Passwordが入力されていません。') return #最大いいね回数の指定 if niceMax_txt.get() != '': nice_max = int(niceMax_txt.get()) else: niceMax_txt.insert(tkinter.END,"900") nice_max = int(niceMax_txt.get()) #いいね間隔の指定 if interval_txt.get() != '': interval = int(interval_txt.get()) else: interval_txt.insert(tkinter.END,"40") interval = int(interval_txt.get()) # 時刻の指定 if hourS_txt.get() != '': s_hour = int(hourS_txt.get()) else: hourS_txt.insert(tkinter.END,"7") s_hour = int(hourS_txt.get()) if hourE_txt.get() != '': e_hour = int(hourE_txt.get()) else: hourE_txt.insert(tkinter.END,"22") e_hour = int(hourE_txt.get()) # ハッシュタグの登録 taglist = [] for tn in range(TAG_NUM): if tag_txt[tn].get() != '': taglist.append(tag_txt[tn].get()) if len(taglist) == 0: print('ハッシュタグが入力されていません。') return print('ユーザーネーム:%s' % username) print('パスワード:%s' % password) print('最大いいね回数:%d回' % nice_max) print('いいね間隔:%d秒' % interval) print('稼働時間帯:%d時~%d時' % (s_hour, e_hour)) print(taglist) # いいねの回数(いいね最大回数をタグ数に平等に分ける) nice_num = int(nice_max / len(taglist)) # Chrome Driverを起動 driver = webdriver.Chrome() time.sleep(1) # ログイン instagram_nice.login(username, password, driver) # 現在の時刻を取得 now = datetime.datetime.now() # いいねループ処理 while 1: # いいね可能時間ならば自動いいね実行 if instagram_nice.time_comp(now, s_hour, e_hour) == 1: # ハッシュタグを切り替えながらいいねを押す動作を繰り返す for tag in taglist: # ハッシュタグで検索 instagram_nice.tagsearch(tag, driver) # いいね instagram_nice.pushnice(nice_num, interval, driver) print("いいね完了!") break # いいね可能時間外ならば何もしない else: print("時間外です。") time.sleep(1800) # tkinterメイン if __name__ == '__main__': #windowの設定 root = tkinter.Tk() # tkinterの読み込み root.title('Instabot') # アプリケーションのタイトル root.geometry('450x370') # ウィンドウのサイズ #tkinter設定 FORM_X = 20 FORM_Y = 20 PARAM_X = 20 PARAM_Y = 100 START_X = 20 START_Y = 300 TAG_X = 260 TAG_Y = 20 #ログインフォーム loginId_lbl = tkinter.Label(text='Login Id') loginId_lbl.place(x=FORM_X, y=FORM_Y) loginId_txt = tkinter.Entry(width=10) loginId_txt.place(x=FORM_X+100, y=FORM_Y) password_lbl = tkinter.Label(text='Password') password_lbl.place(x=FORM_X, y=FORM_Y+30) password_txt = tkinter.Entry(width=10) password_txt.place(x=FORM_X+100, y=FORM_Y+30) #パラメータ項目 niceMax_lbl = tkinter.Label(text='最大いいね回数') niceMax_lbl.place(x=PARAM_X, y=PARAM_Y) niceMax_txt = tkinter.Entry(width=10) niceMax_txt.place(x=PARAM_X+100, y=PARAM_Y) niceMaxU_lbl = tkinter.Label(text='回') niceMaxU_lbl.place(x=PARAM_X+200, y=PARAM_Y+5) interval_lbl = tkinter.Label(text='いいね間隔') interval_lbl.place(x=PARAM_X, y=PARAM_Y+30) interval_txt = tkinter.Entry(width=10) interval_txt.place(x=PARAM_X+100, y=PARAM_Y+30) intervalU_lbl = tkinter.Label(text='秒') intervalU_lbl.place(x=PARAM_X+200, y=PARAM_Y+35) hourS_lbl = tkinter.Label(text='稼働時間(始)') hourS_lbl.place(x=PARAM_X, y=PARAM_Y+90) hourS_txt = tkinter.Entry(width=10) hourS_txt.place(x=PARAM_X+100, y=PARAM_Y+90) hourSU_lbl = tkinter.Label(text='時') hourSU_lbl.place(x=PARAM_X+200, y=PARAM_Y+95) hourE_lbl = tkinter.Label(text='稼働時間(終)') hourE_lbl.place(x=PARAM_X, y=PARAM_Y+120) hourE_txt = tkinter.Entry(width=10) hourE_txt.place(x=PARAM_X+100, y=PARAM_Y+120) hourEU_lbl = tkinter.Label(text='時') hourEU_lbl.place(x=PARAM_X+200, y=PARAM_Y+125) #ハッシュタグ hashTag_lbl = tkinter.Label(text='ハッシュタグ') hashTag_lbl.place(x=TAG_X, y=TAG_Y) TAG_NUM = 10 # ハッシュタグの数 tag_txt = [] for tn in range(TAG_NUM): tag_txt.append(tkinter.Entry(width=15)) tag_txt[tn].place(x=TAG_X+10, y=TAG_Y+30*(tn+1)) #ボタンの生成 start_btn = tkinter.Button(root, text='Start', command=start) start_btn.place(x=START_X, y=START_Y) # メインループ root.mainloop()
from selenium import webdriver from selenium.common.exceptions import WebDriverException from selenium.webdriver.common.action_chains import ActionChains import time import random import chromedriver_binary import datetime def login(username, password, driver): driver.get('https://www.instagram.com/accounts/login/?source=auth_switcher') time.sleep(1) ### 追加箇所 Start ### # メアドとパスワードを入力 driver.find_element_by_name('username').send_keys('自分のID') time.sleep(1) driver.find_element_by_name('password').send_keys('自分のパスワード') time.sleep(1) # ログインボタンを押す driver.find_element_by_class_name('L3NKy').click() time.sleep(1) ### 追加箇所 End ### def tagsearch(tag, driver): # tagで渡ってきたハッシュタグのページにアクセス tagurl = 'https://www.instagram.com/explore/tags/' driver.get(tagurl + tag) time.sleep(1) def time_comp(now, s_hour, e_hour): # いいね可能時間かどうかを判定する if now.hour > s_hour and now.hour <e_hour: return 1 else: return 0 def nice(interval, driver): # いいね実行 time.sleep(random.randint(int(interval*0.9),int(interval*1.1))) driver.find_element_by_class_name('fr66n').click() time.sleep(1) def pushnice(nice_num, interval, driver): # いいねの回数といいねの間隔を引数で指定 # 最新の投稿が見える位置まで移動 target = driver.find_elements_by_class_name('_9AhH0')[10] actions = ActionChains(driver) actions.move_to_element(target) actions.perform() time.sleep(1) # 最新の投稿の1枚目をクリックしていいねを実行 driver.find_elements_by_class_name('_9AhH0')[9].click() time.sleep(1) nice(interval, driver) # 指定回数繰り返し for nn in range(nice_num-1): # ループ中のエラー対策 MAX_RETRY = 10 # エラーリトライ上限 for retry_n in range(MAX_RETRY): # エラー発生時MAX_RETRY回リトライする try: # 次の投稿へ移動 driver.find_element_by_class_name('coreSpriteRightPaginationArrow').click() time.sleep(1) # いいねを押す nice(interval, driver) # エラー時にはリトライ except: print("Error! retry={retry_n}/{MAX_RETRY}".format(retry_n, MAX_RETRY)) time.sleep(5) # エラーなし else: break if __name__ == '__main__': # いいねの動きに対するパラメータ s_hour = 8 # いいね可能開始時間[時] e_hour = 19 # いいね可能終了時間[時] nice_max = 900 # いいね最大回数[回] interval = 40 # いいねの間隔[秒] flag_max = 0 # いいねが最大回数されているかのフラグ # いいねの動きに対するパラメータ username = '自分のID' password = '自分のパスワード' # 検索するハッシュタグを指定する。 taglist = ['camera', 'wine', 'beautiful'] # いいねの回数(いいね最大回数をタグ数に平等に分ける) nice_num = int(nice_max / len(taglist)) # Chrome Driverを起動 driver = webdriver.Chrome() time.sleep(1) # ログイン login(username, password, driver) # 現在の時刻を取得 now = datetime.datetime.now() # いいねループ処理 while 1: # いいね可能時間ならば自動いいね実行 if time_comp(now, s_hour, e_hour) == 1: # ハッシュタグを切り替えながらいいねを押す動作を繰り返す for tag in taglist: # ハッシュタグで検索 tagsearch(tag, driver) # いいね pushnice(nice_num, interval, driver) print("いいね完了!") break # いいね可能時間外ならば何もしない else: print("時間外です。") time.sleep(1800)
試したこと
GUIに紐付けていない自動いいねのコードは問題なく実行できました.
補足情報(FW/ツールのバージョンなど)
Python 3.8.9
あなたの回答
tips
プレビュー