見出し画像

Webスクレイピング

はじめに

有料記事ですが、最後まで無料で読めます。(有料部分にはプログラムファイルがあります)

このプログラムは記事の後半で書いた作業の流れが一通り動くだけでツールとしては不完全な状態ですが、書き方のノウハウや処理の流れ、使うメソッドを調べるのが面倒などの理由で欲しい人がいるかと思うので、一応有料で購入可能にしておきます。ただし、本当に最低限のコーディングでテストも不完全なので上記としての目的で欲しい人だけ購入をお願いします。購入したらすぐ自分の環境で動かせてバグもなくてサポートもしてくれて、みたいな製品として期待している人は間違っても購入しないでください。

私は日々仮想通貨トレードで稼いだりしているのですが、2か月ほど前にP2Eというジャンルがブームになって手を出しました。これはゲームをやりながら稼ぐというコンセプトのdappsでゲームの中でポチポチするとトークンが貰えてそれが取引所とかで売れちゃうんでお金が増えるんですね。一番有名なAxie Infinityなどは貰えるトークンが年初から100倍超えちゃってますwなにやらゲームしてたらお金持ちになるという夢の状況が来ている時代です、凄い。

画像1

そこで私も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ドライバなどはかならずブラウザのバージョンと合わせる必要があります。
※有料版のサンプルコードを買った人は過去に作った環境で作ったプログラムなので最新版では動作しないかもしれません。その場合は修正するか構築する環境を合わせてください。

Windows 2019 Server (10でも可)
Chrome ブラウザ v93
Chrome Webドライバ v93
Python 3.7.7
selenium 3.141.0

1. プログラムを動かすWindowsの準備

今回掲示する方法は2つとなります。どちらかを選択してください。

・WindowsのPCを持っていてローカルに環境構築する
※よっぽどの自信がある人以外は、既に持っているローカル環境を変更するのは基本的におすすめしません。この記事を見ているという事は、おそらくchromeにmetamaskなどをインストール済みの方も多いと思います。これらを変更するという事はリスクがあります。また、プログラムでmetamaskを操作するので、既存のウォレットを使う事もお勧めしません。なるべくなら新環境を構築して新規のウォレットを作成して試す方がいいです。

・AWSのインスタンスを下記のようにWindowsで作成して環境構築する

※スペック的には高頻度取引しなければ、t2.smallで十分かと思います。

画像2

インスタンスが出来たらChromeブラウザとAnacondaとChromeブラウザをインストールします。


ここからはプログラムを動作させる環境の構築になります。

pythonをインストールするにはAnacondaが便利です。

Anacondaのダウンロードページ

https://www.anaconda.com/products/individual

以下の64-Bit~からダウンロードする。

インストール手順のページは以下の記事等を参考にしてください。

画像3

Anacondaのインストールが完了したらWindowsのスタートメニューからAnaconda Promptを右クリックで管理者から実行して「conda update --all」を実行する。(途中でProceed?と聞かれたら「y」を入力し進める。)

画像4
画像5

「pip install selenium」を実行してseleniumをインストールします。

画像6

自身の利用しているChromeのバージョンを確認して、WebDriverを下記のサイトからインストールする。

画像7

該当バージョンのchromedriver_win32.zipをダウンロードする。解凍してchromedriver.exeを任意のフォルダに保存する。

画像8

これでプログラムを書くために必要な環境は揃いました。

CryptoZoonのバトルを自動化するプログラムの作成方法

Webページのスクレイピングをする時はseleniumを使いChromeを利用してDOM操作やJavaScriptの実行を行って目的のページまで遷移させます。プログラムをどうやって作るか簡単には書きますのでご自身で調査しながら作成してみてください。もし、実際のコードをお求めの場合は有料記事を購入してプログラムファイルをダウンロードしてソースを読んでみてください。

※但し私の環境で動作実績があるサンプルコードとしての提供となります。万が一、要素のIDや名前が違う場合はエラーで先に進めない可能性がありますがノークレーム、ノーサポートでお願いします。調査方法を下記に示しますのでソースコードを正しいIDや名前に修正する必要がある可能性をご理解願います。あくまで参考用です。elementのパスの調査はとても面倒でmetamaskの操作などの関数作成などはほぼ使えると思うので、それに価値を感じる人だけ購入してください。購入したプログラムがどんな環境でも必ず動作するといった製品ではない事へのご理解をお願いします。

プログラムの流れですが、以下の処理をスクレイピングで行います。

1. ブラウザを開く
2. 拡張機能の有効化
3. metamaskの初期化(既存のウォレットをインポートする)
4. BSCのネットワーク設定
5. CryptoZoonを開く
6. CryptoZoonとmetamaskを接続する
7. Fight MonsterのFightボタンをクリック
8. metamaskの承認をする
9. バトル結果のウインドウを閉じる

このように、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. ブラウザのメニューからその他のツールでデベロッパーツールを選びます

画像9

2. ツールの左上の□に矢印がついているアイコンをクリックします

画像10

3. 取得したい要素をクリックする

画像11

4. 右のツールがその要素部分にジャンプするので右クリックしてCopy→Copy full pathをクリックする。

画像12

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を調べるのメンドクサイ人は買う価値があると思います。そもそも自力である程度出来ない人は買わない方がいいと思います。

注意事項・免責事項

・有料部分のコードはサンプルなのでそのままで利用できない可能性があります。その際はご自身でIDやnameを調査してコードを修正してください。ノークレーム、ノーリターンでお願いします。
・当noteは事前通知なしに価格変更、販売終了することがあります。
・当botの利用により損失や被害が生じた場合、筆者は一切の責任を負うことはできません。投資は自己責任でお願いします。
・基本的に売り切りとなります。環境構築や導入のサポート等は行いませんので、ご理解の上ご購入をお願いいたします。
・noteご利用規約の「禁止事項」に準拠します。
 https://note.mu/terms
・転載の禁止(本noteに記載された文章、プログラムは許可なく公開、転 載、Discord等での共有を禁止します。)

プログラムファイル

ここから先は

0字 / 1ファイル

¥ 3,980

期間限定 PayPay支払いすると抽選でお得に!

この記事が気に入ったらサポートをしてみませんか?