インスタ自動化を通して学んだこと
勉強したことを記録できるところが欲しいと思い, noteを始めました。このプロジェクトをやる前まではWeb系の知識が完全に0だったので, ここでは一番基本的なことから全部書いていきたい。なお以下の内容はただ班のソースコードを読めるようになる知識について, たらたら書いたものである。
目標
インスタのいいね機能やフォロー機能、リポスト機能を自動化したい!
前提知識
そのためにはWeb系の知識が必要となる以下にそれを書いていく
1.HTMLについて
まず, WebページはHTML, CSS, JavaScriptで書かれている。HTMLは静的なページを構築し, CSSはその形式を指定し, JSは動的なページが作れる。ここ(自動化)では, HTMLしか必要でない。
HTML文の基本構造は
<開始タグ>コンテンツ</終了タグ>
であり, その全体は"要素"と呼ばれる。
しばしば, 要素に何かしらの設定が加えられ, それを"属性"と呼ぶ。
属性を加えたHTMLの基本構造は
<開始タグ 属性="属性値">コンテンツ</終了タグ>
となる。
どのタグにも存在するグローバル属性と特定のタグにしかない属性が存在している。グローバル属性には"id"や"class"があって, "href"や"src"は特定のタグにしかくっつかない。href属性はURLを設定し, srcは埋め込むファイルの場所を設定することものであり, 自動化プログラムには非常に大事なところである!今回, srcは画像ファイルに使う。
2.今回使ったフレームワークやライブラリについて
主軸はseleniumとchromedriver!seleniumは, Webブラウザで行うクリック操作やキーボード入力などをプログラム上から自動で操作できるようにしたライブラリ群であり, chromedriverは, Chromeブラウザをプログラムで動かす為のドライバである。(外部機器とOSを繋ぐデバイスドライバ的な?)
他に使ったのは, 時間に関する関数のtimeライブラリ, OS依存の機能を提供するosライブラリ, HTTPに関するrequestsライブラリ, Windows GUIを自動化するためのpywinautoライブラリなどを用いている。
3.XPathについて
XPath (XML Path Language)とは、ツリー構造となっているXML/HTMLドキュメントからの要素や属性値などを指定するための簡潔な構文(言語)である。Webスクレイピングするときに, 例えばWebページ上のデータを取得したいとき, そのWebページのソースコード(HTML文)からデータの場所を見つける必要がある。そのときに便利なのがXPath!
1の内容からわかるように, HTML文はツリー構造なので, PCのファイルシステムのようにパスで指定することができる。ファイルパスでいくつものファルダを通ってファイルを探すように, XPathによっていくつもの親要素を通って子要素や属性を探すことできる。書き方に関しては, 絶対パスとその省略版, 属性で指定する方法などがある。例えば, 図2のようなWebページをなすHTML構造があったときに, h1タグのコンテンツ"Harry Potter"を指定したいとすると, XPathの書き方は下のコードのようになる。
/html/body/h1/ #絶対パスを使った指定法
//h1 #パスを省略して指定する方法
//h1[@id="booksTitle"] #属性を使って指定する方法
4.HTTPメソッドについて
HTTPメソッドは, Web開発でよく使われる命令で, クライアントがサーバーにしてほしいことを依頼するための手段である。そもそもブラウザで検索してWebページが見られるのは, ブラウザ(クライアント)がWebサーバ(サーバー)に, ページ表示のリクエストを送って, それをWebサーバーが応答してデータを送信することで見られる。その通信するときの方式や約束事がHTTPプロトコルである。
このとき, クライアントがサーバーに依頼する命令をHTTPメソッドと言う。有名なのは, GET, POST, PUT, DELETEの4つで, それぞれデータの取得, データの送信, データの更新, データの削除を意味する命令である。たとえば, 先ほどのWebページが見られる例は, ブラウザがGETメソッドが使われている。
HTTPは, Webスクレイピングのデータ取得段階でよく使用される。HTTPメソッドはrequestsライブラリから利用することができ, 自動化機能の実装では, GETメソッドを利用してリポストしたい投稿の画像の属性を取得した後, その画像データをファイルに保存するときに使用した。
5.自動化機能の実装と使用した関数について
以下がメインの関数である。自動化機能について, 基本的には同じ流れで実装している。インスタ画面を構築するHTMLから, 必要な要素を探してそこに変更を加えることで機能を実現する。
たとえば, アカウントログインの自動化は, ユーザ名とパスワードの入力部分の要素を探してsend_keysメソッドで入力して開くことができ, 自動いいね機能は, いいねボタンの要素を探して, click()でいいねを押すなり, 取り消すなりすればよい。もちろん, 同じ原理で自動フォロー機能も実装できるが, 自動リポストだけは少しが工夫が必要になる。自動リポストは, 自分のPCに保存した画像ファイルを選択して投稿する必要があるため, PC上でボタンを押すことが必要になる。そこはWindows GUIを自動化するためのpywinautoライブラリなどを用いて, 実装をした。
参考にしたサイト
以下に参考にしたサイトを載せました。さらに深く知りたい人はぜひ!