前回の記事で、seleniumを利用したTwitterへの自動ログインのプログラムをご紹介しました。
Twitterでも記事に関するツイートをしたところ、エンジニアの方々から反応が良い引用リツイートを頂きました。
やはり、すでにエンジニアとして動き出している人は、こういった自動化などへの興味・関心が高いことが分かります。
私自身もseleniumを活用して、Web操作によるUIテストなどに利用しています。
前回の記事を以下に掲載しますので、ご興味のある人はぜひ一読して頂けたら幸いです。
seleniumに関する内容や利用するまでの環境構築、ログイン自動化(Twitter)のコードなど記載しています。
【初心者のpython入門】seleniumでログイン自動化!〜Twitter編〜
それでは、本記事では続きとして、seleniumによるTwitter上のフォロー自動化を解説していきます。
目次
seleniumの活用方法について
seleniumによるTwitter上のフォロー自動化を解説する前に、読者の方でseleniumの活用方法がいまいち分からないという人もいらっしゃると思います。
そこで、ここではseleniumが利用できるようになるとどういったことに活用でき、価値を生み出していけるのかをざっくりお話します。
seleniumを端的に説明すると、ブラウザ上の操作をプログラムによって自動的に操作するためのものになります。
このseleniumを利用できるようになると以下の項目を行えるようになります。
1. ブラウザ上の操作を自動化
2. スクレイピング技術と連携させデータ抽出
3. 様々な業務効率化が図れる
4. 収益を生み出すことができる
ざっくりとした項目を挙げていますが、おそらく1番と3番に関してはイメージできるかと思います。
ただ、2番と4番に関しては、いまいちピンとこないという人もいらっしゃると思います。
それでは、具体的に2番と4番を説明していきます。
seleniumによる自動化などは需要がある
seleniumよる自動化は、単純に作業効率がよくなるというメリットだけではありません。
活用方法をよく考えれば収益までたどり着くことも可能になります。
以下の画像では、クラウドソーシングで有名なランサーズの依頼内容を貼り付けています。
プログラミングといってもスクレイピング(データ抽出すること)やブラウザ操作を自動化させるseleniumなどを利用できるだけでも、収益に繋げることもできます。
実際にクラウドソーシングで「データ収集・入力・リスト作成」といった項目などを調べると、とても簡単な仕事はすぐに見つかります。
プログラミングは学習内容の基準値などが求められる人材によって変化するので、一概にここまでできるようになるべきだという線引きがありません。
ただ、非常に簡単な作業も自動化できれば、時間をかけず小さな金額を稼ぐことができます。
プログラムを作成しながら、実務をこなすのにこういった案件は活用しやすいと思います。
また、最悪の場合でプログラムが完成しなくても、このような案件は手動でなんとかこなせるものばかりなので、安心して引き受けることもできます。
このように、プログラムによるちょっとした自動化は、収益に繋げられる領域があるということです。
まさに誰かのための業務効率化を図ってあげられるわけですね。
seleniumによるフォロー自動化のプログラム
それでは、本記事のメインに移っていきます。
ここでは、あくまでフォロー自動化を行うことにフォーカスしていきます。
もちろん、追加の機能などは読者の方がこれをベースに色々と思案していただき、活用していただければ幸いです。
from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.ui import WebDriverWait import time
前回同様、上記のコードではseleniumのインポート及び利用する各種モジュール(webdriver)を指定しています。
また、timeモジュールも利用します。
ブラウザ上の操作にて、画面表示が確実に行えるよう時間指定を行うためです。
# ユーザー名/メールアドレス username = input("mail-address:") # パスワード password = input("password:") # 検索ワード search_word = input("search_word = ")
こちらも前回同様、Twitterのアカウントを複数所持している可能性も考慮して、input関数にて指定できるようにしています。
ただし、今回はフォローするアカウントを特定の検索ワードにて見つけ出すため、検索ワードの変数も作成しています。
driver = webdriver.Chrome(r"webdriverのディレクトリを指定") driver.get("https://twitter.com/") driver.find_element_by_class_name('StaticLoggedOutHomePage-buttonLogin').click() time.sleep(3) username_box = driver.find_element_by_xpath('//*[@id="page-container"]/div/div[1]/form/fieldset/div[1]/input') password_box = driver.find_element_by_xpath('//*[@id="page-container"]/div/div[1]/form/fieldset/div[2]/input') # ユーザ名とパスワードをインプットする username_box.send_keys(username) password_box.send_keys(password)
ここでは、driver変数にて、利用するwebdriverのパスを指定して起動させます。
指定するURLはもちろんツイッターです。
その後、findメソッドを利用して各要素を取得し、クリックや入力を実行していきます。
この時にクラスネームやxpath等を指定する必要があります。
これらを確かめて指定する必要があります。
# ログインボタンを探す login_button = driver.find_element_by_xpath('//*[@id="page-container"]/div/div[1]/form/div[2]/button') #ログインボタンをクリック login_button.click() time.sleep(3)
前回はこのログインまででしたが、ここから検索ワードを用いて、アカウントを画面表示していきます。
# サーチボックスに検索ワードを入力 search_box = driver.find_element_by_xpath('//*[@id="search-query"]') search_box.send_keys(search_word) # サーチボタンを探す search_button = driver.find_element_by_xpath('//*[@id="global-nav-search"]/span/button') # サーチボタンをクリック search_button.click() time.sleep(3)
検索ワードにて、Twitter上のテキストボックスに入力を行い、虫眼鏡アイコンを探し出し、虫眼鏡アイコンをクリックする操作となります。
また、確実に画面出力が行われるようtime.sleep()を利用して3秒間待ちます。
# ユーザーボタンを探す target_button = driver.find_element_by_link_text('ユーザー') # ユーザーボタンをクリック target_button.click() time.sleep(3)
検索ワードにてTwitter上で検索しただけだと、アカウント一覧画面とはならないため、Twitter画面にある「ユーザー」ボタンを探し出し、クリックします。
こちらも同様、画面遷移中のため、3秒間待つようにしています。
# フォロー for follow_element in driver.find_elements_by_xpath('//*[@class="user-actions btn-group not-following not-muting "]'): follow_element.click() time.sleep(3)
最後に、検索ワードに関連したアカウント一覧画面まで表示できたところで、フォローを開始していきます。
フォローボタンを押下されていないアカウントに対して、画面内に表示されているアカウントをフォローしていきます。
以下に一連のプログラムの全体コードを記載しておきます。
# coding: utf-8 from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.ui import WebDriverWait import time # あなたのユーザー名/メールアドレス username = input("mail-address = ") # あなたのパスワード password = input("password = ") # 検索ワード search_word = input("search_word = ") driver = webdriver.Chrome(r"webdriverのディレクトリを指定") driver.get("https://twitter.com/") driver.find_element_by_class_name('StaticLoggedOutHomePage-buttonLogin').click() time.sleep(3) username_box = driver.find_element_by_xpath('//*[@id="page-container"]/div/div[1]/form/fieldset/div[1]/input') password_box = driver.find_element_by_xpath('//*[@id="page-container"]/div/div[1]/form/fieldset/div[2]/input') # ユーザ名とパスワードをインプットする username_box.send_keys(username) password_box.send_keys(password) # ログインボタンを探す login_button = driver.find_element_by_xpath('//*[@id="page-container"]/div/div[1]/form/div[2]/button') #ログインボタンをクリック login_button.click() time.sleep(3) # サーチボックスに検索ワードを入力 search_box = driver.find_element_by_xpath('//*[@id="search-query"]') search_box.send_keys(search_word) # サーチボタンを探す search_button = driver.find_element_by_xpath('//*[@id="global-nav-search"]/span/button') # サーチボタンをクリック search_button.click() time.sleep(3) # ターゲットユーザーボタンを探す target_button = driver.find_element_by_link_text('ユーザー') # ターゲットユーザーボタンをクリック target_button.click() time.sleep(3) # フォロー for follow_element in driver.find_elements_by_xpath('//*[@class="user-actions btn-group not-following not-muting "]'): follow_element.click() time.sleep(3)
とてもシンプルですが、とりあえずseleniumを利用してフォローまで行うことができました。
まとめ
実際に動作を確認した方は、フォローまでを自動で行うことを実感できたと思います。
これだけのコードで非常にシンプルですが、簡単にフォローすることができます。
ただ、シンプルなだけに課題なども挙げられます。
以下に追加機能として、いくつか項目を挙げておこうと思います。
1. フォロー数の制限
できればフォローする人数も決めることができれば、より利用したいプログラムになるかなと思います。
その際は、Twitterの画面で出力されるアカウント数が重要になります。
画面を下へとスクロールすれば、関連アカウントが次々と画面表示されるため、スクロール機能と並行してフォロー数の値を決めていけば、人数制限を用いたフォロー機能になるかと思います。
2. アンフォロー機能について
これは、すでにフォローしているアカウント一覧画面から、フォローボタンを解除するプログラムを作成すれば簡単に作れそうですね。
もちろん、フォローバックしてくれている人は除外するなど、条件付きも考慮する必要はありそうです。
3. いいね!機能について
こちらも、今回作成したフォロー機能を応用して簡単に作れるかと思います。
検索ワードにて、検索ワードに関連するツイート一覧画面を表示して、xpath等を変更すればできそうですね。
追加機能に関する提案内容含め、「selenium面白い!」と感じた人は、ぜひこれらを参考にしてガンガン自動化で遊んで欲しいです。
また、ここではTwitterに絞って解説していますが、別サイトでもxpath等を変更すれば、seleniumを活用できます。
そして、2章でも解説した通り、誰かの依頼内容に沿ったものさえ作成できれば、収益にも繋げられるのが自動化の魅力的なところでもあります。
ぜひ、色々と挑戦していただければなと思います。
また、今後もプログラミングに取り組み続けていく中で、実務に利用できる学びを身につけていかなければなりません。
・PythonによるWebスクレイピング(オライリー出版)
・増補改訂Pythonによるスクレイピング&機械学習 開発テクニック(クジラ飛行机)
・Pythonクローリング&スクレイピング – データ収集・解析のための実践開発ガイド
プログラミング学習で作りたいものがない場合
独学・未経験から始める人も少なくないので、プログラミング学習の継続や学習を続けたスキルアップにはそれなりのハードルが設けられています。
また、プログラミング学習においても、学習者によってはすでに学習対象とするプログラミング言語や狙っている分野が存在するかもしれません。
そのため、費用を抑えて効率的にピンポイント学習で取り組みたいと考える人も少なくありません。
また、プログラミング学習において目的を持って取り組むことは大切ですが、『何を作ればいいかわからない。。』といったスタートの切り方で悩む人もいると思います。
そういったプログラミング学習の指標となる取り組み方について詳細に記載したまとめ記事がありますので、そちらも参照して頂けると幸いです。
Pythonに特化した学習を進めたい人へ
筆者自身は、Pythonista(Python専門エンジニア)としてプログラミング言語Pythonを利用していますが、これには取り組む理由があります。
プログラミングの世界では、IT業界に深く関わる技術的トレンドがあります。
日夜新しい製品・サービスが開発されていく中で、需要のあるプログラミング言語を扱わなければなりません。
トレンドに合わせた学習がプログラミングにおいても重要となるため、使われることのないプログラミング言語を学習しても意味がありません。
こういった点から、トレンド・年収面・需要・将来性などを含め、プログラミング言語Pythonは学習対象としておすすめとなります。
オンラインPython学習サービス – 『PyQ™(パイキュー)』
「PyQ™」は、プログラミング初心者にも優しく、また実務的なプログラミングを段階的に学べることを目指し、開発されたオンラインPython学習サービスです。
Pythonにおける書籍の監修やPythonプロフェッショナルによるサポートもあり、内容は充実しています。
技術書1冊分(3000円相当)の価格で、1ヶ月まるまるプログラミング言語Pythonを学習することができます。
特に、、、
・プログラミングをはじめて学びたい未経験者
・本、動画、他のオンライン学習システムで学習することに挫折したプログラミング初心者
・エンジニアを目指している方(特にPythonエンジニア)
かなり充実したコンテンツと環境構築不要なため、今すぐにでも学び始めたい・学び直したい、Pythonエンジニアを目指したい人におすすめです。
オンラインPython学習サービス「PyQ™(パイキュー)」 ※技術書1冊分の価格から始めて実務レベルのPythonが習得できます |