Compare commits

...

5 Commits

Author SHA1 Message Date
root 9e8d970dbf 偽装を強める(ランダム性とユーザエージェントの追加) 2023-06-02 19:20:15 +09:00
root cddda7dbb7 nohup 無視 2023-06-01 20:45:10 +09:00
root 06f7198ed9 ループ処理 変更 2023-06-01 19:11:42 +09:00
root ca54d390a4 print文言の変更 2023-06-01 17:40:52 +09:00
root a1ed28ac95 視聴中のエラー処理追加 2023-06-01 17:40:41 +09:00
3 changed files with 48 additions and 25 deletions

3
.gitignore vendored
View File

@ -1,2 +1,3 @@
.env .env
__pycache__ __pycache__
nohup.out

View File

@ -5,7 +5,7 @@ from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.keys import Keys
import time,os import time,os,random
import r_kuji import r_kuji
@ -13,6 +13,7 @@ import r_kuji
profile_dir = "/tmp/profile" profile_dir = "/tmp/profile"
username = os.environ["RAKUTENID"] username = os.environ["RAKUTENID"]
password = os.environ["RAKUTENPW"] password = os.environ["RAKUTENPW"]
user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.57"
rch_time = int(os.environ["RCH_WATCH_TIME"]) rch_time = int(os.environ["RCH_WATCH_TIME"])
rch_num = int(os.environ["RCH_WATCH_NUM"]) rch_num = int(os.environ["RCH_WATCH_NUM"])
target_url = "https://channel.rakuten.co.jp/" target_url = "https://channel.rakuten.co.jp/"
@ -30,6 +31,7 @@ def gen_driver():
options = webdriver.ChromeOptions() options = webdriver.ChromeOptions()
options.add_argument("--window-size=1920,1080") options.add_argument("--window-size=1920,1080")
options.add_argument("--user-data-dir=" + profile_dir ) options.add_argument("--user-data-dir=" + profile_dir )
options.add_argument('--user-agent=' + user_agent )
driver = webdriver.Remote( driver = webdriver.Remote(
command_executor="http://selenium:4444/wd/hub", command_executor="http://selenium:4444/wd/hub",
@ -50,7 +52,7 @@ def init_profiles():
wait = WebDriverWait(driver, 10) wait = WebDriverWait(driver, 10)
element = wait.until(EC.presence_of_element_located((By.TAG_NAME, 'body'))) element = wait.until(EC.presence_of_element_located((By.TAG_NAME, 'body')))
driver.save_screenshot('./ss/ss.png') driver.save_screenshot('./ss/initial.png')
# Welcomeメッセージを閉じる # Welcomeメッセージを閉じる
try: try:
@ -71,22 +73,19 @@ def init_profiles():
user = driver.find_element(By.CSS_SELECTOR, user_textarea_css) user = driver.find_element(By.CSS_SELECTOR, user_textarea_css)
user.send_keys(username) user.send_keys(username)
driver.save_screenshot('./ss/ss_usrname.png')
user.send_keys(Keys.ENTER) user.send_keys(Keys.ENTER)
time.sleep(10) time.sleep(10)
# パスワード入力 # パスワード入力
passwd = driver.find_element(By.CSS_SELECTOR, passwd_textarea_css) passwd = driver.find_element(By.CSS_SELECTOR, passwd_textarea_css)
passwd.send_keys(password) passwd.send_keys(password)
driver.save_screenshot('./ss/ss_password.png')
passwd.send_keys(Keys.ENTER) passwd.send_keys(Keys.ENTER)
time.sleep(10) time.sleep(10)
driver.save_screenshot('./ss/ss_password2.png')
except Exception as e: except Exception as e:
print(e) print(e)
driver.save_screenshot('./ss/ss2.png') driver.save_screenshot('./ss/begin.png')
# Coockie 取得 # Coockie 取得
cookies = driver.get_cookies() cookies = driver.get_cookies()
@ -103,27 +102,50 @@ def watching_rch():
wait = WebDriverWait(driver, 10) wait = WebDriverWait(driver, 10)
element = wait.until(EC.presence_of_element_located((By.TAG_NAME, 'body'))) element = wait.until(EC.presence_of_element_located((By.TAG_NAME, 'body')))
# 10秒待機
time.sleep(10)
for i in range(0, rch_num): for i in range(0, rch_num):
print( str( i + 1) + "番目のチャンネルの視聴を始めます。視聴時間は" + str(rch_time) + "秒に設定されています。") # 30秒150秒待機
channel_btns = driver.find_elements(By.CSS_SELECTOR, channel_btn_css) random_seconds = random.randint(30, 150)
channel_btn = channel_btns[i] time.sleep(random_seconds)
channel_btn.click()
time.sleep(10) print( "Rチャンネル:" + str( i + 1) + "番目のチャンネルの視聴を始めます。視聴時間は" + str(rch_time) + "秒に設定されています。")
driver.save_screenshot('./ss/channel_' + str(i) + '.png')
time.sleep(rch_time) try:
channel_btns = driver.find_elements(By.CSS_SELECTOR, channel_btn_css)
channel_btn = channel_btns[i]
channel_btn.click()
except:
print("Rチャンネル:チャンネルが選択できませんでした。")
try:
driver.save_screenshot('./ss/error.png')
except:
print("Rチャンネル:スクリーンショットの保存でエラーが発生しました。")
now_time = time.time()
end_time = now_time + rch_time
while time.time() <= end_time:
try:
driver.save_screenshot('./ss/watching.png')
except:
print("Rチャンネル:スクリーンショットの保存でエラーが発生しました。")
time.sleep(30)
try:
driver.refresh()
except:
print("Rチャンネル:ページの更新に失敗しました。")
driver.quit() driver.quit()
def main(): def main():
init_profiles() init_profiles()
watching_rch() watching_rch()
if __name__ == '__main__': if __name__ == '__main__':
time.sleep(60) # selniumコンテナの起動を待つ待機 # 60-900秒待機 (毎日同時刻にアクセスすることを回避)
random_seconds = random.randint(60, 900)
time.sleep(random_seconds) # selniumコンテナの起動を待つ待機
main() main()
try: try:
r_kuji.rkuji() r_kuji.rkuji()

View File

@ -27,29 +27,29 @@ class class_rkuji:
def challenge_rkuji(self): def challenge_rkuji(self):
for u in self.url_txts: for u in self.url_txts:
if 'redirect' in u: if 'redirect' in u:
print(f'ラッキーくじ:「{u}」はスキップ。(理由redirect)') print(f'ラッキーくじ:「{u}」はスキップ。(理由:redirect)')
continue continue
try: try:
self.driver.get(u) self.driver.get(u)
kuji_title = self.driver.title kuji_title = self.driver.title
except: except:
print(f'ラッキーくじ:「{u}」はスキップ。(理由アクセス失敗)') print(f'ラッキーくじ:「{u}」はスキップ。(理由:アクセス失敗)')
continue continue
if(len(self.driver.find_elements(By.ID, "entry"))>0): if(len(self.driver.find_elements(By.ID, "entry"))>0):
print(f'ラッキーくじ:くじを引きます。({kuji_title})') print(f'ラッキーくじ:{kuji_title}」くじを引きます。')
time.sleep(5) time.sleep(5)
try: try:
start_button = self.driver.find_element(By.ID, "entry") start_button = self.driver.find_element(By.ID, "entry")
start_button.click() start_button.click()
WebDriverWait(self.driver,60).until(EC.url_changes(u)) WebDriverWait(self.driver,60).until(EC.url_changes(u))
print(f'ラッキーくじ:くじを引きました。({kuji_title})') print(f'ラッキーくじ:{kuji_title}」くじを引きました。')
self.driver.save_screenshot('./ss/r_kuji.png') self.driver.save_screenshot('./ss/r_kuji.png')
time.sleep(5) time.sleep(5)
except: except:
(f'ラッキーくじ:「{kuji_title}」はスキップ。(理由くじ引き失敗)') (f'ラッキーくじ:「{kuji_title}」はスキップ。(理由:くじ引き失敗)')
else: else:
print(f'ラッキーくじ:「{kuji_title}」はスキップ。(理由くじ引き不能)') print(f'ラッキーくじ:「{kuji_title}」はスキップ。(理由:くじ引き不能)')
def close(self): def close(self):
self.driver.quit() self.driver.quit()