Python/Selenium ペアーズを自動操作で足跡をつける

ペアーズで自動で足跡をつけるコードの書き方になります。

前提

言語はPythonで、Seleniumというライブラリを使用します。
ブラウザはGoogle Chromeを使用しますので、ChromeDriverが必要になります。

スクレイピングするだけですが、足跡をつけた結果から改善点を分析する必要があります。
具体的には、以下を分析したいですね。

  • プロフィール写真がダメでプロフィールを見てもらえない。
    この場合、足跡が返ってこないです。
  • プロフィールは見てもらえているが、いいねがもらえない。
    プロフィールで魅了できていないと考えられます。

その他にも知りたい情報は多々あると思います。
そのため、ただスクレイピングするだけでなく、どれくらいの時間で何人に足跡をつけたのかを出力しています。

コード

早速ですが、コードは以下のようになります。

import os
import time
import random
import sys
import time
import math
from datetime import datetime
from getpass import getpass
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

Hour = 3600
Minute = 60
TotalNum=1
NumForOnePage = 16

def IntTryParse(val):
    try:
        return int(val)
    except ValueError:
        return val

def LeaveFootPrint(repeatStr):
    global TotalNum
    num=1
    currentNum = 1
    maxNum = random.randint(500,700)
    print("Leave %s footprints"%str(maxNum))
    while currentNum < maxNum:
        src= "https://pairs.lv/#/search/one/%s"%str(num)
        driver.get(src)
        print("Current: {0}/{1}, Total: {2}, {3}".format(str(currentNum), maxNum, str(TotalNum), repeatStr))
        if num == NumForOnePage:
            num = 0
        num += 1
        currentNum += 1
        TotalNum += 1
        time.sleep(random.randint(3,7))

def ShowElapsedTime(startTime):
    elapsed_time = time.time() - startTime
    hour = math.floor(elapsed_time / Hour)
    elapsedHour = hour * Hour
    minite = math.floor((elapsed_time - elapsedHour) / Minute)
    sec = str(elapsed_time - elapsedHour - minite * Minute)[:2]
    print("所要時間は「%s時間%s分%s秒」"%(str(hour), str(minite), str(sec)))

def TakeRest():
    minutesToRest = random.randint(15,30)
    print("Take a rest for {0} minutes".format(str(minutesToRest)))
    nowTime = datetime.now()
    print("will end %s:%s"%(str(nowTime.hour), str(nowTime.minute + minutesToRest)))
    driver.get("https://pairs.lv/#/search/grid/1")
    time.sleep(minutesToRest * 60)

def GetRepeatString(counter, maxRepeatNum):
    repeatStr = "Repeat: "
    if maxRepeatNum == 0:
        repeatStr += "なし"
    elif maxRepeatNum > 0:
        repeatStr += "{0}/{1}".format(str(counter), str(maxRepeatNum))
    else:
        repeatStr += "無限"
    return repeatStr

driver = webdriver.Chrome(r'./chromedriver.exe')
driver.get("https://pairs.lv/#/login")

element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "registerBtn1"))
)

if element is not None:
    print(element)
    driver.execute_script("arguments[0].click();", element)

key = input('pairsのトップページが出たらrepeat回数を指定してください(マイナスの値は無限ループ)')
while not isinstance(IntTryParse(key), int):
    print("数字を入力してください")
    key = input()

print("Start!")
maxRepeatNum = int(key)
counter = 1
while True:
    startTime = time.time()
    print("%s回目"%str(counter))
    LeaveFootPrint(GetRepeatString(counter, maxRepeatNum))
    ShowElapsedTime(startTime)
    if (maxRepeatNum     > -1 and counter > maxRepeatNum):
        print("End")
        break
    TakeRest()
    counter += 1

注意事項

ペアーズの自動化とスクレイピングに関しては自己責任でお願いします。

また、私の得意言語はC#なのですが、そんな私が初めて書いたPythonのコードでのため、命名規則がC#となっています。

最後に & 関連書籍

スクレイピングを勉強したい方は、以下のインスタグラムの自動いいねのコードも参考にしてみてください。
ペアーズのコードとは違い、人間が操作している感じに作りこんでいるので、よりスクレイピングの勉強になると思います。

分かりにくいところや「もっとこうしてほしい」などのご意見がありましたら、ツイッターから連絡いただけると幸いです。
質問に関してもお気軽にお問い合わせください。

以下は関連書籍です。

コメント

タイトルとURLをコピーしました