Webスクレイピング
はじめに
有料記事ですが、最後まで無料で読めます。(有料部分にはプログラムファイルがあります)
私は日々仮想通貨トレードで稼いだりしているのですが、2か月ほど前にP2Eというジャンルがブームになって手を出しました。これはゲームをやりながら稼ぐというコンセプトのdappsでゲームの中でポチポチするとトークンが貰えてそれが取引所とかで売れちゃうんでお金が増えるんですね。一番有名なAxie Infinityなどは貰えるトークンが年初から100倍超えちゃってますwなにやらゲームしてたらお金持ちになるという夢の状況が来ている時代です、凄い。
そこで私もCryptoZoonというのを始めたんですね~ウッキウキで!ところが現実は甘くありませんでした。。。毎日8時間毎にモンスターと戦って報酬を稼ぐのですが、これが結構大変でして。自分のモンスターのターン数というのがあってレア度が高いと回数が多くなり、これに加えて複数モンスターを所有していると1日100回以上戦う事になったりしてまぁまぁ時間がかかってだるいんです。
もっとも、報酬はなかなかいいのでやるんですが人間なのでたまに8時間経って戦える状態になったのに忘れてたりするんです。そうなると1日3回出来るはずが2回になったりして貰える報酬が減るわけです。これはまぁ、気分が良くないんですよねー本当に。なので、アラームをセットして時間管理しだしてまるで仕事みたいになってきています。しかも単純作業で決められた時間にやらなければいけないという強制労働。。。ゲームして遊んで稼ぐのどこいったんだよと。
そこでなんとか自動化出来ないかと考えました。色々とハマりながら、まだ不完全ですが自身のモンスターが1体でLevel3のモンスターと戦って報酬を得るというシンプルですが土台となる部分まで出来ました。せっかくなので、自動化するまでのノウハウを書きたいと思います。一覧の流れを見て自身で調べれば実装出来ると思います。ただ、このプログラム自体を動かす部分は自動ではないので、Windowのタスクスケジューラなので動かすのがいいでしょう。
また、プログラミングに詳しくない人にとってはちょっと難しい内容かもしれません。自動化にあたり実現させるためにはいくつかの方法があると思うので、もし自動化に興味があるけどプログラミングは分からないという人は、例えばマウスクリック記憶ツールなどを使うといいと思います。
では以下より、自動化までの手順を説明していきます。
Windows(AWS又はローカル)+Python+Selenium+Chrome headlessの環境構築
今回のツールはWindows上でpython、selenium、chromeブラウザ、chromeドライバを使います。まずはこれらをインストールして環境構築する必要ががあります。
環境構築は千差万別なので基本的に質問などはお答えできかねます。参考に私の試した環境は以下です。Windowsは10でもおそらく大丈夫ですが、pythonやchromeのバージョンがこれ以外の環境では動作保証できませんので注意してください。バージョンによって結構違うので割と動かない事が多いです。chromeのwebドライバなどはかならずブラウザのバージョンと合わせる必要があります。
※有料版のサンプルコードを買った人は過去に作った環境で作ったプログラムなので最新版では動作しないかもしれません。その場合は修正するか構築する環境を合わせてください。
1. プログラムを動かすWindowsの準備
今回掲示する方法は2つとなります。どちらかを選択してください。
・WindowsのPCを持っていてローカルに環境構築する
※よっぽどの自信がある人以外は、既に持っているローカル環境を変更するのは基本的におすすめしません。この記事を見ているという事は、おそらくchromeにmetamaskなどをインストール済みの方も多いと思います。これらを変更するという事はリスクがあります。また、プログラムでmetamaskを操作するので、既存のウォレットを使う事もお勧めしません。なるべくなら新環境を構築して新規のウォレットを作成して試す方がいいです。
・AWSのインスタンスを下記のようにWindowsで作成して環境構築する
※スペック的には高頻度取引しなければ、t2.smallで十分かと思います。
インスタンスが出来たらChromeブラウザとAnacondaとChromeブラウザをインストールします。
ここからはプログラムを動作させる環境の構築になります。
pythonをインストールするにはAnacondaが便利です。
Anacondaのダウンロードページ
https://www.anaconda.com/products/individual
以下の64-Bit~からダウンロードする。
インストール手順のページは以下の記事等を参考にしてください。
Anacondaのインストールが完了したらWindowsのスタートメニューからAnaconda Promptを右クリックで管理者から実行して「conda update --all」を実行する。(途中でProceed?と聞かれたら「y」を入力し進める。)
「pip install selenium」を実行してseleniumをインストールします。
自身の利用しているChromeのバージョンを確認して、WebDriverを下記のサイトからインストールする。
該当バージョンのchromedriver_win32.zipをダウンロードする。解凍してchromedriver.exeを任意のフォルダに保存する。
これでプログラムを書くために必要な環境は揃いました。
CryptoZoonのバトルを自動化するプログラムの作成方法
Webページのスクレイピングをする時はseleniumを使いChromeを利用してDOM操作やJavaScriptの実行を行って目的のページまで遷移させます。プログラムをどうやって作るか簡単には書きますのでご自身で調査しながら作成してみてください。もし、実際のコードをお求めの場合は有料記事を購入してプログラムファイルをダウンロードしてソースを読んでみてください。
プログラムの流れですが、以下の処理をスクレイピングで行います。
このように、1バトル完了するところまでの実装になります。ここで超大事な事としてmetamaskの操作をするので、理解してちゃんと動作するまでは必ず新しいウォレットで試してください。間違えてウォレットが削除されて復元出来ないとかなんか分からないけど大損したとか言われても責任はとれません!新しいプログラムを動かす時は、既存のウォレットや環境などを利用せずに新環境で試すのが鉄則です。これが出来ない人はいつか大きな後悔を負う事でしょう。理想をいえば、新しくAWSのインスタンスなどを建てて試してください。
コードの流れ
まず必要なモジュールを読み込む処理とクラス作成とコンストラクタ、あとはメイン関数とそこからそれぞれの処理を書きます。DOMをロードするのでelementが取れるまでwaitして待つなどの処理が必要です。
モジュールを読み込む部分
# _*_ coding: utf-8 _*_
from selenium import webdriver #ブラウザ制御
from selenium.webdriver.chrome.options import Options #ブラウザ制御を始める時のオプション設定
from selenium.webdriver.common.by import By #要素の選択方法
from selenium.webdriver.support.ui import WebDriverWait #待機
from selenium.webdriver.support import expected_conditions as EC #待機条件指定
import os
import time
import pprint
クラスとコンストラクタの部分。ここでは、ブラウザのオプションも設定しています。拡張設定の有効化やheadlessかどうかなどを指定します。
class BaseProcess:
def __init__(self):
CHROME_BIN = "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe"
CHROME_DRIVER = os.path.expanduser('C:\\Users\\Administrator\\python-anaconda\\chromedriver.exe')
extension_path = "C:\\Users\\Administrator\\AppData\\Local\\Google\\Chrome\\User Data\\Default\\Extensions\\nkbihfbeogaeaoehlefnkodbefgpgknn\\10.0.3_0"
self.ftime = 10
self.wtime = 5
self.url = 'https://app.cryptozoon.io/fight-monster'
options = Options()
options.binary_location = CHROME_BIN
#options.add_argument('--headless')
options.add_argument('--load-extension=' + extension_path)
options.add_argument('--window-size=1280,3000')
self.browser = webdriver.Chrome(CHROME_DRIVER, chrome_options=options)つ
次にメイン関数部分。ここでは上で説明した各処理を関数にした物を呼び出して実行していきます。
def scrayping(self, url, backup_phrase, password):
#メタマスク初期化
self.metamask_init(backup_phrase, password)
#BSC network設定
self.metamask_net_setting()
time.sleep(self.wtime)
#サイトを開く
self.open_site()
#metamaskをサイトと繋ぐ
self.metamask_connect()
time.sleep(self.wtime)
#ゲーム内作業
self.play_game()
#metamaskの承認
self.metamask_sign()
#ゲーム内作業
self.close_game()
ここで作ったクラスは下の方でインスタンスを作ってメソッドを呼び出して動かします。
def main():
backup_phrase = "パスフレーズを書いておく"
password = "パスワードを書いておく"
url = 'https://app.cryptozoon.io/fight-monster'
bot = BaseProcess()
bot.scrayping(url,backup_phrase,password)
if __name__ == "__main__":
main()
最後に各処理の書き方です。一連の作業に対応したメソッドを呼び出して実行していきます。例えばhromeのタブを切り替えたり、ページ内のボタンを押したりとかです。ページ内の操作をする場合はelementをメソッドに渡す必要があります。elementの特定方法ですが、まずは1~9までの処理を手動で実行します。そして必要となるelementを以下のやり方で調べると簡単です。
1. ブラウザのメニューからその他のツールでデベロッパーツールを選びます
2. ツールの左上の□に矢印がついているアイコンをクリックします
3. 取得したい要素をクリックする
4. 右のツールがその要素部分にジャンプするので右クリックしてCopy→Copy full pathをクリックする。
5. 取得したパスを以下のようなメソッドに渡すと自動でそのelementをクリックする事が出来ます。
webdriver.Chrome(CHROME_DRIVER, chrome_options=options).find_element_by_xpath(
'/html/body/div/div[2]/div[2]/div[2]/div/div[3]/div[3]/div/div[3]/div/button').click()
こういった要素のパスを取得して適切なメソッドに渡してあげれば上で書いたような処理を全て自動化する事が出来ます。これはなかなか大変な作業ですが、metamaskの接続部分などは他のゲームやDEXなどの操作にも共通して使えると思うので頑張る価値はあると思います。また、metamaskの操作においてのサンプルは以下のGithubにありましたので参考になると思います。
長くなりましたが、スクレイピングのための環境構築とプログラムの作り方は大体説明しました。もうちょっと詳細な部分を知りたい方は有料部分のサンプルコードを購入してください。頑張って調べて作ったので流石に無料で全部出すのは辞めましたw
あと何度も繰り返しますが、あくまでサンプルなのですぐに動く物と思って購入するのは辞めてください。自分で頑張ってスクレイピングのプログラムを作る意志があるけど、少し見本がないと進まないとか、elementのpathを調べるのメンドクサイ人は買う価値があると思います。そもそも自力である程度出来ない人は買わない方がいいと思います。
注意事項・免責事項
プログラムファイル
ここから先は
¥ 3,980
Amazonギフトカード5,000円分が当たる
この記事が気に入ったらチップで応援してみませんか?