数学やプログラミングや映画など

新米SEがwebと数学と映画についてつらつら書きたいブログです。

【体験談】IT企業の転職活動時に面接でウケが良かったエピソードをまとめる話

math-it.hatenablog.com

math-it.hatenablog.com

↑の続き。
万が一もう一回転職活動するときに自分で振り返れるようにメモ。
個人的な感覚な話になりますが、面接がうまくいった時はだいたい自分も気分が良いので面接をする側とそんなにギャップはない、はず。

転職理由 からの 社内ツールをたくさん作った話

まず、転職理由をざっくり下記のように話しました。

  • 開発業務以外の業務が多すぎる (運用、カスタマーサポートなど)
  • 開発に集中して取り組めるように普段の業務の省力化をするツールをたくさん作った
  • それでも限界はあるので転職して開発をメインに働きたい

このような話をすると、大体ツールについて突っ込んでくれたので、作ったツールの説明をいくつかしました。
反応良かったのは下記の話です。

  • カスタマーサポート業務で使う検証環境を用意するツールの開発、改善

- ansible の playbook を調整したりしてました

- シェルスクリプトperlpython など、環境にあった言語でスクリプト作ってました

ansible とかは取っ付きずらいですが、慣れるととっても便利なことに気づいたので好きです。
なんとなくですが、playbook ちゃんとかける人は出来る人、な認識がある気がしました。

あとは言語にこだわりがあるわけではなく、状況に応じて色々書ける、も反応が良かったです。

業務以外に勉強している話

どの企業の面接でも大抵 「最近勉強していること」について聞かれました。
今実際に機械学習について勉強を進めていて、その話をすると結構反応が良かったです。
python で scikit-learn とか tensorflow とかで遊んでます! というと大体話が盛り上がってくれました。

うちではこんなことしてるよー、みたいな話もその場で聞けたりしたので楽しくお話ができました。
イデアをもらえたりもしたのですごい良かったなと個人的にも感じてます。

勉強会の話

勉強会に出たりするのが好きだったので、
勉強会に参加してます!最近はこんな技術を知って面白かったです!
みたいな事を言ってました。

勝手に学んでくれる社員が居ると楽なんでしょうね、これも反応良かったです。

逆質問で会社の事を積極的に知る姿勢

なるべく質問をたくさんしました、質問すると大体一生懸命向こうが話してくれるのでなんとなく場の雰囲気が良くなりました。
下記の質問をよくしました。

社内の勉強会はどれぐらい開催されてますか?

勉強会がたくさん開催されるような、意欲的な社員が多い会社で働きたいと考えています。
みたいな話に持っていくようにしてました、実際そう思いますし。

機械学習を使ったプロジェクトはどのようなものがありますか?

機械学習関連のプロジェクトに配属されたら楽しそうだな、と思って質問してました。
やっぱり最近多い or 力を入れたいみたいで、色々教えてくれました。
こちらとしてはいい情報収拾ができたと思います。

上下の風通しは良く、下から意見が言いやすいと感じますか?

積極的に手をあげて発言したいです!みたいな話に持っていくようにしてました。
大体の企業でそういう人は大歓迎です、という事を言ってもらえました。

ご縁があって入社する場合、どのような技術を使ったプロジェクトに配属される可能性が高いですか?

せっかく個人で勉強するなら直近で役に立つ技術を学びたいです、みたいに話してました。
好きな事やってていいんじゃない?みたいな事を言われることが多かったですが、反応は悪くなかったと思います。

飲み会はありますか?

部署や上下関係なく情報交換の場があると嬉しいです、そういう場で出るアイデアはあると思います!
みたいな事を主張しましたw
実際そうだと思いますし、飲み会好きです!
面接の相手が偉い人であるほど好感触でした。

まとめ

転職活動を振り返って感触が良かったエピソードを書いてみました。
今考えると面接で色々喋ったりお話が聞けたりするのは合否に関わらず楽しかったな、と思います。

【体験談】IT企業の新卒3年目が転職活動を始めて転職先がIT企業に決まった話

math-it.hatenablog.com

↑の続き、無事転職先が決まりました。
どうやって転職活動してきたか、と結果はどうだったのかを書いていきます。
転職理由などは↑の記事をご参照ください。

転職活動の方法

リクルートエージェントのみ利用しました。
行き詰まったら他のエージェントも利用しようと考えていましたが、無事決まりました。
エージェントを通すと日程調整がものすごい楽でした。

転職活動の期間

6月半ばから7月半ばにかけての約1ヶ月間。

受けた企業と結果

最終的に応募した企業は10社でした。

選考辞退

→ サービスがあまり好きになれなかったため辞退

  • 大手コンサルの開発エンジニア職

→ 説明を聞いてコンサルが好きになれなかった、とりあえず今は手を動かしてものを作りたかったため辞退

書類落ち

  • 広告代理店グループ企業のデータサイエンティスト職

→ 求めるスキルと経歴が異なるためお祈り

  • インフラ系企業の開発エンジニア職

→ すでに募集人数が集まったためお祈り

  • 動画サイト運営企業のデータサイエンティスト職

→ 求めるスキルと経歴が異なるためお祈り

  • 受諾開発Sierの開発エンジニア職

→ 求めるスキルと経歴が異なるためお祈り

一次面接落ち

  • 大手Web系企業の開発エンジニア職

→ 入社の熱意が感じられない + サービスについての理解が浅いためお祈り

→ 即戦力が必要であり、経験が浅いと判断したためお祈り

内定

  • 大手特別派遣企業の開発エンジニア職

→ 派遣はしんどいかも、と判断して辞退

→ 内定受諾、9月から働きます

一番しんどかったこと

一番しんどかったことは書類落ちでも面接がうまくいかなかったことでもなく、現職での退職交渉でした。
ここまで育てていただき、ろくに成果もあげずに退職する、という自責が一番大きいです。
;; もちろん小さな成果はあったと自負していますが、期待に応えられていたかというとそうではなかったです。

新卒入社の若手が辞める、というのは少なからず他メンバーに影響を与えることであり、
特に売り手市場を呼ばれる今のご時世は会社に大きな打撃を与える、という話を上司にされました。
そういった意味でも会社に迷惑をかけてしまいました。

また、一緒に働くメンバーが良い人たちでゆったりと働けていたので、その人たちと働けなくなるのも少し心苦しいです。

まあ転職すると決めたのは私自身なので自業自得ですし、いずれはやめていたと思うので後悔はしていませんが。
一番しんどい場面はこれらの理由から 退職交渉でした。

その他ちょっとした感想

  • 新卒3年目はポテンシャル重視の企業と即戦力重視の企業とどちらもある

規模の小さい企業は即戦力を求めているのを強く感じました。
逆に大企業は余裕があるからか、今後ののびしろを重視するのを感じました。

  • Web系の企業は自社サービスを好きになれるかを重視する感がある

どのWeb系企業でも面接の時にそう感じました。
どういうサービスに関わりたいか、なぜうちのサービスに関わりたいのかをとにかく深掘りされました。
やはり作るサービスは好きでないとモチベーションが続かないからでしょうか。
あとは私が受けた企業は開発エンジニアがサービスの企画をするようなところのみでしたので、自社サービスが好きでないと企画で大きくつまづくのではないか、という判断もあったのではないかと推測しています。

  • エージェントは便利

面接の日程調整に加え、期限付きの適性検査などのリマインドメールも送ってくれました。
完全に見落としていたので非常に助かりました。
また、企業ごとの面接対策の資料をもらえるのも助かりました。
よく聞かれる質問集などがもらえたのである程度準備ができました。

  • モチベーションの維持は結構大変

予想はしていましたが、落ちると落ち込みます。
ここに行きたい、と思っていた企業に落ちると結構心にダメージがくるので心構えは大事だなと思いました。
落ちた際のモチベーションを保つのが少し大変でした。

  • 個人での学習はかなりポジティブな印象をつけられる

仕事以外に開発、勉強しています、というアピールがかなり強力に効いたと感じました。
どの企業も自主的に楽しく勉強してくれるエンジニアを求めているんだな、と思いました。

今後の話

あと2週間ぐらい働いて引き継ぎや文書化作業をします。
その後8月末まで有休消化します。
有給消化期間中はクラウドソーシングで仕事受けたり、個人の開発や勉強に時間を当てる予定です。
有休消化ヤッホイ!

【体験談】IT企業の新卒3年目が転職活動を始めた話

転職活動を始めたので現状まとめとどうやってやってるかの話。
きっと今のご時世転職する人が多いと思うので、こうやって進めてる人もいるんだよ、の参考になれば嬉しい!

現職となんで辞めるのか

  • 現職

- 大学院卒業後に新卒で入社して今3年目
- システム運用の会社で開発やってる
- 一日の仕事の内容は 開発 2 : カスタマーサポート 7 : 企画もどきの会議やその他雑務 1

  • 辞める理由

- 開発がやりたい、新しいフレームワークとか触ってみたい
- カスタマーサポートの比率おかしいでしょ!開発がいい!っと思って半年前に転職を決意

スキルとこれまでやってきたこと

  • 言語経験

- Python 1年 (opencv とか numpy で数値解析とか画像処理をやった)
- Java 1ヶ月ぐらい (読めるけどそんな書いたことないぐらい)
- PHPJavascript 2年 (不動産会社のホームページの裏っかわ作ってた)

  • 資格

- 応用情報とデータベーススペシャリストとセキュリティスペシャリスト持ってる (セスペは更新しないからもうなくなるけど)

  • 業務

- 新規サービスの立ち上げのメンバーとしてPythonで画像処理やったり
- カスタマーサポートして既存サービスのバグフィックスしたり(PerlとかPHPで書かれたアプリ)

  • 英語

- 英語のドキュメントは業務で読む
- チャットでスペイン人と話してる、意味は通じてるらしいので多分大丈夫

目指してる企業

  • コードをいっぱい書けるとこ(できたらPythonがいいけど抵抗無いからなんでも大丈夫)
  • 社員同士飲みに行ったりして仲が良く風通しの良い企業
  • 給料は少しぐらいは下がっても大丈夫だけどあんまり下がるとちょっと・・・

転職方法

最近本格的に転職活動を始めようと決意してリクルートエージェントに登録しました。
エージェントさまと面談して、意向を伝えると色々紹介してくれた。
新卒の時の就職活動より楽!

現状と所感

  • 現状

- リクルートエージェントのサービス使ってぽちぽちブラウザから企業に応募した
- 10社ぐらいWeb系や受託系の会社に応募して半分落ちて半分書類通ったところ
- 面接は2社行った、一つは通って一つはお祈り

  • エージェントについて

リクルートエージェントは頼りになる(日程調整が楽、希望を伝えると企業を提案してくれる)。
他のエージェントはまだ登録しないでしばらくやってみる予定。

  • 大変なところ

正直仕事しながら転職活動は大変。
17:00 で早上がりして 18:00 から面接、とかで頑張ってるけど早上がりすると少し職場の空気が悪くなりそうで怖い。

  • 楽しいところ

企業のホームページとか採用ページとか事業内容とかをみると、今まで無かった目線で見れるのでちょっと楽しい。
自分のスキルや今までやってきたことを整理するので少し達成感。

これからの進め方

9月1日に転職したいので、そのつもりで進める。
とりあえず不満は無いので今の所はリクルートエージェントを使い続ける。

【CentOS7】 django で hello world をする話

CentOS7 上の pythonフレームワーク djangohello world をした話です。

環境

django プロジェクトを作成する

django-admin startproject ${プロジェクト名} というコマンドでプロジェクトを作成します。今回は mysite というプロジェクトを作成します。

$ mkdir sample
$ cd sample/
$ django-admin startproject mysite
$ tree mysite
mysite
├── manage.py
└── mysite
    ├── __init__.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py

1 directory, 5 files

次にホスト名の許可の設定をします。
Django では セキュリティ上の理由で設定したホスト名以外でのアクセスが出来ないようになっています。
そこで mysite/settings.py の ALLOWED_HOSTS を編集します。
今回はテストで作成するものなので '*' を設定し、全てのホスト名でのアクセスが出来るようにします。

$ vim mysite/settings.py
$ grep 'ALLOWED_HOSTS' mysite/settings.py
ALLOWED_HOSTS = ['*']

サーバを起動する

プロジェクトディレクトリの manage.py に runserver ${IPアドレス}:${ポート} という引数を持たせて実行します。
${IPアドレス} は許可するアクセス元IPであり、全てのIPアドレスからのアクセスを許可する場合は 0 か 0.0.0.0 を指定します。

$ python3.6 manage.py runserver 0:8000
Performing system checks...

System check identified no issues (0 silenced).

You have 14 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.

January 29, 2018 - 04:56:50
Django version 2.1.dev20180127235140, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

Web ブラウザから http://${IPアドレス}:8000 にアクセスしたところ、django が応答することを確認できました。

f:id:nknshmsk:20180202131506p:plain

アプリケーションを作る

アプリケーションを作成するには プロジェクトディレクトリの manage.py に startapp ${アプリ名} という引数を持たせて実行します。

django でアプリケーションは、何らかの処理を行うWebアプリケーションを指します。
プロジェクト一つに対してアプリケーションは複数設置することができ、また一つのアプリケーションは複数のプロジェクトで使用することができます。

今回は hello world の文字列を返すようなアプリケーション hello を作成します。

$ python3.6 manage.py startapp hello
$ tree hello
hello
├── admin.py
├── apps.py
├── __init__.py
├── migrations
│   └── __init__.py
├── models.py
├── tests.py
└── views.py

アプリケーションが作成できたので、hello ディレクトリ の view.py を編集してビューを書いていきます。
今回は HTTP によるアクセスが来たら hello, world! という文字列を返すようにします。

$ vim hello/views.py
$ cat hello/views.py
from django.shortcuts import render

from django.http import HttpResponse

def index(request):
  return HttpResponse("Hello, world!")

ビューが出来たので、URL との関連付け(ルーティング)をします。
hello ディレクトリに urls.py というファイルを作り、ルーティングを書いていきます。
今回はドキュメントルートへアクセスが来たら先ほどビューに書いた index を呼び出します。

$ vim hello/urls.py
$ cat hello/urls.py
from django.urls import path

from . import views

urlpatterns = [
  path('', views.index, name='index'),
]

最後にプロジェクトディレクトリ(mysite)の urls.py にルーティングを書き、hello アプリケーションのルートを決めます。
今回は hello/ をルートとし、そこへアクセスが来た場合は hello アプリケーションのルーティングに従うように書きます。

$ vim mysite/urls.py
$ cat mysite/urls.py
"""mysite URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/dev/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('hello/', include('hello.urls')),
]

ここまでで準備が整ったので、django を起動します。

$ python3.6 manage.py runserver 0:0
Performing system checks...

System check identified no issues (0 silenced).

You have 14 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.

January 31, 2018 - 04:10:15
Django version 2.1.dev20180127235140, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

ブラウザから http://${IPアドレス}:8000/hello にアクセスしたところ、hello アプリケーションが正しく応答することが確認できました。

f:id:nknshmsk:20180202131530p:plain

おわりに

djangohello world をしました。

python 学習は以下の書籍がオススメです。
体系的に勉強するならまず買っておいて損は無いでしょう。
私は大分慣れた今でもバイブル代わりに使ってます。

django については英語の書籍ですが以下がオススメです。
内容が充実しているので一冊持っておくと役に立ちます。

【CentOS7】 django をインストールする話

CentOS7 に pythonフレームワーク django をインストールした話です。

django とは

pythonWebアプリケーションフレームワークです。
非常に多機能であり、フルスタックフレームワークと称されることもしばしば。
Webサーバとしてコンテンツを提供するもよし、APIサーバとしてもよしな器用なで便利な子です。

近年では最も勢いのあるPythonフレームワークであり、求人でも django のスキルを求められることが多く見られます。

インストールする環境

$ cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)

Python の最新バージョン(3.6.4) をインストールする

関連パッケージのインストール。
以下のコマンドを実行します。

$ sudo yum install gcc zlib-devel bzip2 bzip2-devel readline readline-devel sqlite sqlite-devel openssl openssl-devel git

Python3 のインストール。
yumリポジトリを追加してそこから取ってきます。
以下のコマンドを実行します。

$ sudo yum install -y https://centos7.iuscommunity.org/ius-release.rpm
$ sudo yum install python36u python36u-libs python36u-devel python36u-pip
$ python3.6 --version
Python 3.6.4

django のインストール


公式のgithubリポジトリから取ってきます。
以下のコマンドを実行します。

$ git clone https://github.com/django/django.git
$ sudo pip3.6 install -e django/
Obtaining file:///home/(snip)/django
Collecting pytz (from Django==2.1.dev20180127235140)
  Downloading pytz-2017.3-py2.py3-none-any.whl (511kB)
    100% |████████████████████████████████| 512kB 2.0MB/s
Installing collected packages: pytz, Django
  Running setup.py develop for Django
Successfully installed Django pytz-2017.3
$ python3.6 -m django --version
2.1.dev20180127235140

ここまでで django のインストールが完了し、動作する環境が整いました。

おわりに

GCP上のCentOS7にdjangoをインストールしました。

python 学習は以下の書籍がオススメです。
体系的に勉強するならまず買っておいて損は無いでしょう。
私は大分慣れた今でもバイブル代わりに使ってます。

django については英語の書籍ですが以下がオススメです。
内容が充実しているので一冊持っておくと役に立ちます。

Wordpressのセキュリティチェックツール WPScan の使い方の話

Wordpressのセキュリティチェックツール WPScan の使い方を解説する話です。

WPScan とは

WPScan とはWordPressをインターネット経由でセキュリティチェックしてくれるツールです。

https://wpscan.org/

インターネット経由なので、WordPressのサイトにどの様な脆弱性が潜んでいるのかを、攻撃者の立場で知ることができます。

今回の記事ではわざとバージョンの低いWordPressサイトを用意して、それに対してWPScanを実行してみます。

WPScanをインストールする

サーバにWPScanをインストールします。
手順は基本的に公式サイトhttps://wpscan.org/ を参考に作成しました。

インストールするサーバは AWS(Amazon Web Service)上の Amazon Linux を対象としました。
Amazon LinuxRHELCentOS と似てるので、これらでも以下の手順でできると思います。)

まず Ruby をインストールします。
2017年 8月30日 時点で推奨バージョンが 2.4.1 だったのでそれをインストールしました。

$ sudo yum -y install gcc zlib-devel openssl-devel readline-devel libffi-devel
$ wget http://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.1.tar.gz
$ tar zxvf ruby-2.4.1.tar.gz
$ cd ruby-2.4.1
$ ./configure
$ make
$ sudo make install

次に Rubygem をインストールします。

$ wget http://production.cf.rubygems.org/rubygems/rubygems-2.6.13.zip
$ unzip rubygems-2.6.13.zip
$ ruby setup.rb
$ sudo ruby setup.rb

最後にWPScan をインストールします。

$ yum -y install ruby-devel libxml2 libxml2-devel libxslt libxslt-devel libcurl-devel patch git
$ cd ~
$ curl -sSL https://rvm.io/mpapis.asc | gpg --import -
$ curl -sSL https://get.rvm.io | bash -s stable
$ source ~/.rvm/scripts/rvm
$ echo "source ~/.rvm/scripts/rvm" >> ~/.bashrc
$ rvm install 2.4.1
$ rvm use 2.4.1 --default
$ echo "gem: --no-ri --no-rdoc" > ~/.gemrc
$ git clone https://github.com/wpscanteam/wpscan.git
$ cd wpscan
$ gem install bundler
$ bundle install --without test

以上でインストールが完了しました。

古いバージョンのWordPressを用意する

この辺を参考にAWS上に用意しました。

math-it.hatenablog.com

バージョンは 3.9.2 でこれが公開されたのは2014年8月6日 です。物凄く古いです。

f:id:nknshmsk:20170830134258p:plain

WPScan を実行する

実行しました、結構な量の脆弱性外部からのアクセスのみでわかりました。
以下の [!] がついた項目がCriticalな脆弱性ですね。
※ 結構長いのでさらっと読み流してください。

$ ruby wpscan.rb -u 54.250.246.4
_______________________________________________________________
        __          _______   _____                  
        \ \        / /  __ \ / ____|                 
         \ \  /\  / /| |__) | (___   ___  __ _ _ __ ®
          \ \/  \/ / |  ___/ \___ \ / __|/ _` | '_ \ 
           \  /\  /  | |     ____) | (__| (_| | | | |
            \/  \/   |_|    |_____/ \___|\__,_|_| |_|

        WordPress Security Scanner by the WPScan Team 
                       Version 2.9.4-dev
          Sponsored by Sucuri - https://sucuri.net
   @_WPScan_, @ethicalhack3r, @erwan_lr, pvdl, @_FireFart_
_______________________________________________________________

[+] URL: http://54.250.246.4/
[+] Started: Wed Aug 30 04:39:44 2017

[!] The WordPress 'http://54.250.246.4/readme.html' file exists exposing a version number
[+] Interesting header: SERVER: Apache/2.2.32 (Amazon)
[+] Interesting header: X-POWERED-BY: PHP/5.3.29
[+] XML-RPC Interface available under: http://54.250.246.4/xmlrpc.php
[!] Includes directory has directory listing enabled: http://54.250.246.4/wp-includes/

[+] WordPress version 3.9.2 (Released on 2014-08-06) identified from meta generator, readme, links opml
[!] 42 vulnerabilities identified from the version number

[!] Title: WordPress 3.4.2 - 3.9.2 Does Not Invalidate Sessions Upon Logout
    Reference: https://wpvulndb.com/vulnerabilities/7531
    Reference: http://whiteoaksecurity.com/blog/2012/12/17/cve-2012-5868-wordpress-342-sessions-not-terminated-upon-explicit-user-logout
    Reference: http://blog.spiderlabs.com/2014/09/leveraging-lfi-to-get-full-compromise-on-wordpress-sites.html
    Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2012-5868
[i] Fixed in: 4.0

[!] Title: WordPress 3.0-3.9.2 - Unauthenticated Stored Cross-Site Scripting (XSS)
    Reference: https://wpvulndb.com/vulnerabilities/7680
    Reference: http://klikki.fi/adv/wordpress.html
    Reference: https://wordpress.org/news/2014/11/wordpress-4-0-1/
    Reference: http://klikki.fi/adv/wordpress_update.html
    Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-9031
[i] Fixed in: 4.0

[!] Title: WordPress <= 4.0 - Long Password Denial of Service (DoS)
    Reference: https://wpvulndb.com/vulnerabilities/7681
    Reference: http://www.behindthefirewalls.com/2014/11/wordpress-denial-of-service-responsible-disclosure.html
    Reference: https://wordpress.org/news/2014/11/wordpress-4-0-1/
    Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-9034
    Reference: https://www.rapid7.com/db/modules/auxiliary/dos/http/wordpress_long_password_dos
    Reference: https://www.exploit-db.com/exploits/35413/
    Reference: https://www.exploit-db.com/exploits/35414/
[i] Fixed in: 4.0.1

[!] Title: WordPress <= 4.0 - Server Side Request Forgery (SSRF)
    Reference: https://wpvulndb.com/vulnerabilities/7696
    Reference: http://www.securityfocus.com/bid/71234/
    Reference: https://core.trac.wordpress.org/changeset/30444
    Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-9038
[i] Fixed in: 4.0.1

[!] Title: WordPress 3.9, 3.9.1, 3.9.2, 4.0 - XSS in Media Playlists
    Reference: https://wpvulndb.com/vulnerabilities/7697
    Reference: https://core.trac.wordpress.org/changeset/30422
    Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-9032
[i] Fixed in: 4.0.1

[!] Title: WordPress <= 4.1.1 - Unauthenticated Stored Cross-Site Scripting (XSS)
    Reference: https://wpvulndb.com/vulnerabilities/7929
    Reference: https://wordpress.org/news/2015/04/wordpress-4-1-2/
    Reference: https://cedricvb.be/post/wordpress-stored-xss-vulnerability-4-1-2/
    Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2015-3438
[i] Fixed in: 4.1.2

[!] Title: WordPress <= 4.0 - CSRF in wp-login.php Password Reset
    Reference: https://wpvulndb.com/vulnerabilities/7691
    Reference: https://core.trac.wordpress.org/changeset/30418
    Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-9033
[i] Fixed in: 4.0.1

[!] Title: WordPress <= 4.2.2 - Authenticated Stored Cross-Site Scripting (XSS)
    Reference: https://wpvulndb.com/vulnerabilities/8111
    Reference: https://wordpress.org/news/2015/07/wordpress-4-2-3/
    Reference: https://twitter.com/klikkioy/status/624264122570526720
    Reference: https://klikki.fi/adv/wordpress3.html
    Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2015-5622
    Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2015-5623
[i] Fixed in: 3.9.7

[!] Title: WordPress <= 4.2.3 - wp_untrash_post_comments SQL Injection 
    Reference: https://wpvulndb.com/vulnerabilities/8126
    Reference: https://github.com/WordPress/WordPress/commit/70128fe7605cb963a46815cf91b0a5934f70eff5
    Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2015-2213
[i] Fixed in: 3.9.8

[!] Title: WordPress <= 4.2.3 - Timing Side Channel Attack
    Reference: https://wpvulndb.com/vulnerabilities/8130
    Reference: https://core.trac.wordpress.org/changeset/33536
    Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2015-5730
[i] Fixed in: 3.9.8

[!] Title: WordPress <= 4.2.3 - Widgets Title Cross-Site Scripting (XSS)
    Reference: https://wpvulndb.com/vulnerabilities/8131
    Reference: https://core.trac.wordpress.org/changeset/33529
    Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2015-5732
[i] Fixed in: 3.9.8

[!] Title: WordPress <= 4.2.3 - Nav Menu Title Cross-Site Scripting (XSS)
    Reference: https://wpvulndb.com/vulnerabilities/8132
    Reference: https://core.trac.wordpress.org/changeset/33541
    Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2015-5733
[i] Fixed in: 3.9.8

[!] Title: WordPress <= 4.2.3 - Legacy Theme Preview Cross-Site Scripting (XSS)
    Reference: https://wpvulndb.com/vulnerabilities/8133
    Reference: https://core.trac.wordpress.org/changeset/33549
    Reference: https://blog.sucuri.net/2015/08/persistent-xss-vulnerability-in-wordpress-explained.html
    Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2015-5734
[i] Fixed in: 3.9.8

[!] Title: WordPress <= 4.3 - Authenticated Shortcode Tags Cross-Site Scripting (XSS)
    Reference: https://wpvulndb.com/vulnerabilities/8186
    Reference: https://wordpress.org/news/2015/09/wordpress-4-3-1/
    Reference: http://blog.checkpoint.com/2015/09/15/finding-vulnerabilities-in-core-wordpress-a-bug-hunters-trilogy-part-iii-ultimatum/
    Reference: http://blog.knownsec.com/2015/09/wordpress-vulnerability-analysis-cve-2015-5714-cve-2015-5715/
    Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2015-5714
[i] Fixed in: 3.9.9

[!] Title: WordPress <= 4.3 - User List Table Cross-Site Scripting (XSS)
    Reference: https://wpvulndb.com/vulnerabilities/8187
    Reference: https://wordpress.org/news/2015/09/wordpress-4-3-1/
    Reference: https://github.com/WordPress/WordPress/commit/f91a5fd10ea7245e5b41e288624819a37adf290a
    Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2015-7989
[i] Fixed in: 3.9.9

[!] Title: WordPress <= 4.3 - Publish Post & Mark as Sticky Permission Issue
    Reference: https://wpvulndb.com/vulnerabilities/8188
    Reference: https://wordpress.org/news/2015/09/wordpress-4-3-1/
    Reference: http://blog.checkpoint.com/2015/09/15/finding-vulnerabilities-in-core-wordpress-a-bug-hunters-trilogy-part-iii-ultimatum/
    Reference: http://blog.knownsec.com/2015/09/wordpress-vulnerability-analysis-cve-2015-5714-cve-2015-5715/
    Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2015-5715
[i] Fixed in: 3.9.9

[!] Title: WordPress  3.7-4.4 - Authenticated Cross-Site Scripting (XSS)
    Reference: https://wpvulndb.com/vulnerabilities/8358
    Reference: https://wordpress.org/news/2016/01/wordpress-4-4-1-security-and-maintenance-release/
    Reference: https://github.com/WordPress/WordPress/commit/7ab65139c6838910426567849c7abed723932b87
    Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-1564
[i] Fixed in: 3.9.10

[!] Title: WordPress 3.7-4.4.1 - Local URIs Server Side Request Forgery (SSRF)
    Reference: https://wpvulndb.com/vulnerabilities/8376
    Reference: https://wordpress.org/news/2016/02/wordpress-4-4-2-security-and-maintenance-release/
    Reference: https://core.trac.wordpress.org/changeset/36435
    Reference: https://hackerone.com/reports/110801
    Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-2222
[i] Fixed in: 3.9.11

[!] Title: WordPress 3.7-4.4.1 - Open Redirect
    Reference: https://wpvulndb.com/vulnerabilities/8377
    Reference: https://wordpress.org/news/2016/02/wordpress-4-4-2-security-and-maintenance-release/
    Reference: https://core.trac.wordpress.org/changeset/36444
    Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-2221
[i] Fixed in: 3.9.11

[!] Title: WordPress <= 4.4.2 - SSRF Bypass using Octal & Hexedecimal IP addresses
    Reference: https://wpvulndb.com/vulnerabilities/8473
    Reference: https://codex.wordpress.org/Version_4.5
    Reference: https://github.com/WordPress/WordPress/commit/af9f0520875eda686fd13a427fd3914d7aded049
    Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-4029
[i] Fixed in: 4.5

[!] Title: WordPress <= 4.4.2 - Reflected XSS in Network Settings
    Reference: https://wpvulndb.com/vulnerabilities/8474
    Reference: https://codex.wordpress.org/Version_4.5
    Reference: https://github.com/WordPress/WordPress/commit/cb2b3ed3c7d68f6505bfb5c90257e6aaa3e5fcb9
    Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-6634
[i] Fixed in: 4.5

[!] Title: WordPress <= 4.4.2 - Script Compression Option CSRF
    Reference: https://wpvulndb.com/vulnerabilities/8475
    Reference: https://codex.wordpress.org/Version_4.5
    Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-6635
[i] Fixed in: 4.5

[!] Title: WordPress <= 4.5.1 - Pupload Same Origin Method Execution (SOME)
    Reference: https://wpvulndb.com/vulnerabilities/8489
    Reference: https://wordpress.org/news/2016/05/wordpress-4-5-2/
    Reference: https://github.com/WordPress/WordPress/commit/c33e975f46a18f5ad611cf7e7c24398948cecef8
    Reference: https://gist.github.com/cure53/09a81530a44f6b8173f545accc9ed07e
    Reference: http://avlidienbrunn.com/wp_some_loader.php
    Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-4566
[i] Fixed in: 3.9.12

[!] Title: WordPress 3.6-4.5.2 - Authenticated Revision History Information Disclosure
    Reference: https://wpvulndb.com/vulnerabilities/8519
    Reference: https://wordpress.org/news/2016/06/wordpress-4-5-3/
    Reference: https://github.com/WordPress/WordPress/commit/a2904cc3092c391ac7027bc87f7806953d1a25a1
    Reference: https://www.wordfence.com/blog/2016/06/wordpress-core-vulnerability-bypass-password-protected-posts/
    Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-5835
[i] Fixed in: 3.9.13

[!] Title: WordPress 2.6.0-4.5.2 - Unauthorized Category Removal from Post
    Reference: https://wpvulndb.com/vulnerabilities/8520
    Reference: https://wordpress.org/news/2016/06/wordpress-4-5-3/
    Reference: https://github.com/WordPress/WordPress/commit/6d05c7521baa980c4efec411feca5e7fab6f307c
    Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-5837
[i] Fixed in: 3.9.13

[!] Title: WordPress 2.5-4.6 - Authenticated Stored Cross-Site Scripting via Image Filename
    Reference: https://wpvulndb.com/vulnerabilities/8615
    Reference: https://wordpress.org/news/2016/09/wordpress-4-6-1-security-and-maintenance-release/
    Reference: https://github.com/WordPress/WordPress/commit/c9e60dab176635d4bfaaf431c0ea891e4726d6e0
    Reference: https://sumofpwn.nl/advisory/2016/persistent_cross_site_scripting_vulnerability_in_wordpress_due_to_unsafe_processing_of_file_names.html
    Reference: http://seclists.org/fulldisclosure/2016/Sep/6
    Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-7168
[i] Fixed in: 3.9.14

[!] Title: WordPress 2.8-4.6 - Path Traversal in Upgrade Package Uploader
    Reference: https://wpvulndb.com/vulnerabilities/8616
    Reference: https://wordpress.org/news/2016/09/wordpress-4-6-1-security-and-maintenance-release/
    Reference: https://github.com/WordPress/WordPress/commit/54720a14d85bc1197ded7cb09bd3ea790caa0b6e
    Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-7169
[i] Fixed in: 3.9.14

[!] Title: WordPress 2.9-4.7 - Authenticated Cross-Site scripting (XSS) in update-core.php
    Reference: https://wpvulndb.com/vulnerabilities/8716
    Reference: https://github.com/WordPress/WordPress/blob/c9ea1de1441bb3bda133bf72d513ca9de66566c2/wp-admin/update-core.php
    Reference: https://wordpress.org/news/2017/01/wordpress-4-7-1-security-and-maintenance-release/
    Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-5488
[i] Fixed in: 3.9.15

[!] Title: WordPress 3.4-4.7 - Stored Cross-Site Scripting (XSS) via Theme Name fallback
    Reference: https://wpvulndb.com/vulnerabilities/8718
    Reference: https://www.mehmetince.net/low-severity-wordpress/
    Reference: https://wordpress.org/news/2017/01/wordpress-4-7-1-security-and-maintenance-release/
    Reference: https://github.com/WordPress/WordPress/commit/ce7fb2934dd111e6353784852de8aea2a938b359
    Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-5490
[i] Fixed in: 3.9.15

[!] Title: WordPress <= 4.7 - Post via Email Checks mail.example.com by Default
    Reference: https://wpvulndb.com/vulnerabilities/8719
    Reference: https://github.com/WordPress/WordPress/commit/061e8788814ac87706d8b95688df276fe3c8596a
    Reference: https://wordpress.org/news/2017/01/wordpress-4-7-1-security-and-maintenance-release/
    Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-5491
[i] Fixed in: 3.9.15

[!] Title: WordPress 2.8-4.7 - Accessibility Mode Cross-Site Request Forgery (CSRF)
    Reference: https://wpvulndb.com/vulnerabilities/8720
    Reference: https://github.com/WordPress/WordPress/commit/03e5c0314aeffe6b27f4b98fef842bf0fb00c733
    Reference: https://wordpress.org/news/2017/01/wordpress-4-7-1-security-and-maintenance-release/
    Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-5492
[i] Fixed in: 3.9.15

[!] Title: WordPress 3.0-4.7 - Cryptographically Weak Pseudo-Random Number Generator (PRNG)
    Reference: https://wpvulndb.com/vulnerabilities/8721
    Reference: https://github.com/WordPress/WordPress/commit/cea9e2dc62abf777e06b12ec4ad9d1aaa49b29f4
    Reference: https://wordpress.org/news/2017/01/wordpress-4-7-1-security-and-maintenance-release/
    Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-5493
[i] Fixed in: 3.9.15

[!] Title: WordPress 3.5-4.7.1 - WP_Query SQL Injection
    Reference: https://wpvulndb.com/vulnerabilities/8730
    Reference: https://wordpress.org/news/2017/01/wordpress-4-7-2-security-release/
    Reference: https://github.com/WordPress/WordPress/commit/85384297a60900004e27e417eac56d24267054cb
    Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-5611
[i] Fixed in: 3.9.16

[!] Title: WordPress 3.6.0-4.7.2 - Authenticated Cross-Site Scripting (XSS) via Media File Metadata
    Reference: https://wpvulndb.com/vulnerabilities/8765
    Reference: https://wordpress.org/news/2017/03/wordpress-4-7-3-security-and-maintenance-release/
    Reference: https://github.com/WordPress/WordPress/commit/28f838ca3ee205b6f39cd2bf23eb4e5f52796bd7
    Reference: https://sumofpwn.nl/advisory/2016/wordpress_audio_playlist_functionality_is_affected_by_cross_site_scripting.html
    Reference: http://seclists.org/oss-sec/2017/q1/563
    Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-6814
[i] Fixed in: 3.9.17

[!] Title: WordPress 2.8.1-4.7.2 - Control Characters in Redirect URL Validation
    Reference: https://wpvulndb.com/vulnerabilities/8766
    Reference: https://wordpress.org/news/2017/03/wordpress-4-7-3-security-and-maintenance-release/
    Reference: https://github.com/WordPress/WordPress/commit/288cd469396cfe7055972b457eb589cea51ce40e
    Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-6815
[i] Fixed in: 3.9.17

[!] Title: WordPress 2.3-4.7.5 - Host Header Injection in Password Reset
    Reference: https://wpvulndb.com/vulnerabilities/8807
    Reference: https://exploitbox.io/vuln/WordPress-Exploit-4-7-Unauth-Password-Reset-0day-CVE-2017-8295.html
    Reference: http://blog.dewhurstsecurity.com/2017/05/04/exploitbox-wordpress-security-advisories.html
    Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-8295

[!] Title: WordPress 2.7.0-4.7.4 - Insufficient Redirect Validation
    Reference: https://wpvulndb.com/vulnerabilities/8815
    Reference: https://github.com/WordPress/WordPress/commit/76d77e927bb4d0f87c7262a50e28d84e01fd2b11
    Reference: https://wordpress.org/news/2017/05/wordpress-4-7-5/
    Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-9066
[i] Fixed in: 3.9.19

[!] Title: WordPress 2.5.0-4.7.4 - Post Meta Data Values Improper Handling in XML-RPC
    Reference: https://wpvulndb.com/vulnerabilities/8816
    Reference: https://wordpress.org/news/2017/05/wordpress-4-7-5/
    Reference: https://github.com/WordPress/WordPress/commit/3d95e3ae816f4d7c638f40d3e936a4be19724381
    Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-9062
[i] Fixed in: 3.9.19

[!] Title: WordPress 3.4.0-4.7.4 - XML-RPC Post Meta Data Lack of Capability Checks 
    Reference: https://wpvulndb.com/vulnerabilities/8817
    Reference: https://wordpress.org/news/2017/05/wordpress-4-7-5/
    Reference: https://github.com/WordPress/WordPress/commit/e88a48a066ab2200ce3091b131d43e2fab2460a4
    Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-9065
[i] Fixed in: 3.9.19

[!] Title: WordPress 2.5.0-4.7.4 - Filesystem Credentials Dialog CSRF
    Reference: https://wpvulndb.com/vulnerabilities/8818
    Reference: https://wordpress.org/news/2017/05/wordpress-4-7-5/
    Reference: https://github.com/WordPress/WordPress/commit/38347d7c580be4cdd8476e4bbc653d5c79ed9b67
    Reference: https://sumofpwn.nl/advisory/2016/cross_site_request_forgery_in_wordpress_connection_information.html
    Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-9064
[i] Fixed in: 3.9.19

[!] Title: WordPress 3.3-4.7.4 - Large File Upload Error XSS
    Reference: https://wpvulndb.com/vulnerabilities/8819
    Reference: https://wordpress.org/news/2017/05/wordpress-4-7-5/
    Reference: https://github.com/WordPress/WordPress/commit/8c7ea71edbbffca5d9766b7bea7c7f3722ffafa6
    Reference: https://hackerone.com/reports/203515
    Reference: https://hackerone.com/reports/203515
    Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-9061
[i] Fixed in: 3.9.19

[!] Title: WordPress 3.4.0-4.7.4 - Customizer XSS & CSRF
    Reference: https://wpvulndb.com/vulnerabilities/8820
    Reference: https://wordpress.org/news/2017/05/wordpress-4-7-5/
    Reference: https://github.com/WordPress/WordPress/commit/3d10fef22d788f29aed745b0f5ff6f6baea69af3
    Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-9063
[i] Fixed in: 3.9.19

[+] WordPress theme in use: twentyfourteen - v1.1

[+] Name: twentyfourteen - v1.1
 |  Last updated: 2017-06-08T00:00:00.000Z
 |  Location: http://54.250.246.4/wp-content/themes/twentyfourteen/
[!] The version is out of date, the latest version is 2.0
 |  Style URL: http://54.250.246.4/wp-content/themes/twentyfourteen/style.css
 |  Theme Name: Twenty Fourteen
 |  Theme URI: http://wordpress.org/themes/twentyfourteen
 |  Description: In 2014, our default theme lets you create a responsive magazine website with a sleek, modern des...
 |  Author: the WordPress team
 |  Author URI: http://wordpress.org/

[+] Enumerating plugins from passive detection ...
[+] No plugins found

[+] Finished: Wed Aug 30 04:39:45 2017
[+] Requests Done: 73
[+] Memory used: 25.367 MB
[+] Elapsed time: 00:00:00

いくつかピックアップして読み取ると以下の様な感じですね。

  • readme.html が外部から見れる様になってる (バージョン情報が丸わかりなので危険)
  • wp-includes 以下のディレクトリが外部から見れる様になっている
  • 42個脆弱性が見つかっている(バージョンが古いことに起因)
  • テーマ Twenty Fourteen のバージョンが古い

外部からのアクセスのみでこれだけの情報がわかります。知識のある人から見たらすぐにでサービス停止に持っていける様な情報です。
脆弱性の多くはバージョンが古いことに起因しているので、少なくともこれを見たらバージョン上げようという気になりますね。

この様に WPScan を使うと外部からのセキュリティチェックを実施することができます。

また、オプションも色々あり、攻撃を仕掛けたりログインを総当たりのパスワードで試みたり、ということもできます。
攻撃者のツールとしても使うことができてしまいますね。(やめてください。)

おわりに

  • WPScan をインストールしました
  • 古いバージョンのWordPressを用意して、WPScanを実行してみました
  • Critical な脆弱性42個も見つかりました

WordPressを運用している人は一回使ってみると良いかもしれませんね!

ランサーズでタスクを(半)自動化した話【体験談】

クラウドソーシングサービス「ランサーズ」で、作業を(半)自動化した話です。

クラウドソーシングなら日本最大級の「ランサーズ」


他のランサーズの記事の続きなので、良ければこちらもどうぞ。

  ↓ ↓ ↓

math-it.hatenablog.com

math-it.hatenablog.com

概要

前回までの記事でタスクをひたすらこなしましたが、さすがに億劫になってきたので自動化しました。

対象のタスクは 検索結果の調査 で yahoo とか google で特定キーワードで検索した際、特定順位のURLかタイトルを取ってきてほしい、
というタスクです。

このタスクを行うのに、ブラウザでぽちぽちするのがものすごいめんどくさいので自動化する方法についてまとめました。

検索結果調査のタスクについて

検索結果調査のタスクは具体的に以下のような作業であることがほとんどです。

  • . ブラウザで yahoo か google のトップページを開く
  • . 特定キーワード で検索する
  • . 検索結果で 特定順位の Webサイトのタイトル、もしくはURLをメモする
  • . 2. と3. を10~20件ぐらい繰り返して、まとめて報告する

通信環境やPCのスペックにもよりますが、タスク1件こなすのに4分程度かかります。
それに対して支払われる報酬は5~10円程度です。

時給に換算すると75~150円程度であり、さすがに面倒です。
また、作業中は常にポチポチマウスとキーボードを操作しなくてはいけないので、他の作業を平行して行うことができません。

そこで私は楽して稼げるとはいえ、さすがに面倒で飽きるな、と思いました。
ここで考えたのが、何とかこの作業を自動化して他のタスクや作業と並行してこの検索結果調査の作業を行えないか、ということです。

自動化するのに利用したツール

タスクを提示する側の条件として、実際にブラウザを使って行え、という事が明記されていることが多くあります。
そこで、今回はブラウザを自動操作することでタスクの自動化を図ります。

ツールは以下を用いました。

Pythonは世に広く知られたプログラミング言語です。基本的にこの言語で自動化ツールを作成します。
Seleniumはブラウザの自動操作に用いられるツールです。Python用のSeleniumライブラリが公開されているのでこれを用います。
Chromedriver は Selenium を通して GoogleChromeブラウザ を操作するのに使います。

準備

まず、必要ツールを手元のPCにインストールします。

Pythonのインストールは以下のサイトから行います。
Downloads → Windows から 3.X.X 系のPythonを選んでダウンロード、インストールしましょう。

Welcome to Python.org

Pythonのインストールが終わったら、Seleniumライブラリのインストールをします。

コマンドプロンプトPowerShellを起動して以下のコマンドを実行します。

pip install selenium

最後にChromedriverのダウンロードをします。ダウンロードは以下のサイトから行います。
Google Chrome Driver の右にあるバージョンをクリックするとダウンロードページに飛べるので、自分のPCのOSに合わせたものをダウンロードします。

http://www.seleniumhq.org/download/

ここまでで準備は完了です。

スクリプトを作成する

はい、以下のスクリプトを作成しました。

import os
import time
import sys
import csv
from selenium import webdriver

DRIVER_PATH = os.path.join(os.path.dirname(__file__), 'chromedriver')

TARGETLIST = csv.reader(open("./target.csv"))

REQ = sys.argv[1]
ENGINE = sys.argv[2]
RANK = sys.argv[3]

if ENGINE == "google":
	URL = "http://www.google.com"
	SFORM = "q"
if ENGINE == "yahoo":
	URL = "http://www.yahoo.co.jp"
	SFORM = "p"
	NEXTXPATH = "//*[@id='Sp1']/p/a[1]"
if __name__ == '__main__':
	try:
		browser = webdriver.Chrome(DRIVER_PATH)
		browser.get(URL)
		browser.implicitly_wait(10)
		for TARGET in TARGETLIST:
			print(TARGET[0])
			if RANK == "des":
				[NUMBER, WORD] = TARGET[0].split("\t")
				if int(NUMBER) > 10:
					NEXT = 1
					PAGE = int(NUMBER)//10
					if ENGINE == "google":
						NEXTXPATH = "//*[@id='nav']/tbody/tr/td["+str(int(PAGE)+1)+"]/a"
					if ENGINE == "yahoo":
						NEXTXPATH = "//*[@id='Sp1']/p/a["+str(int(PAGE)-1)+"]"
					NUMBER = str(int(NUMBER) % 10)
				else: 
					NEXT = 0
			else:
				[NUMBER, WORD] = [str(1), TARGET[0]]
				NEXT = 0
			search_input = browser.find_element_by_name(SFORM)
			search_input.clear()
			search_input.send_keys(WORD)
			search_input.submit()
			browser.implicitly_wait(10)

			if NEXT == 1:
				browser.find_element_by_xpath(NEXTXPATH).click()
				browser.implicitly_wait(10)

			if ENGINE == "google":
				TAGT = browser.find_elements_by_xpath("//*[@id='rso']/div/div/div["+NUMBER+"]/div/div/h3")
				TAGL = browser.find_elements_by_xpath("//*[@id='rso']/div/div/div["+NUMBER+"]/div/div/h3/a")
			if ENGINE == "yahoo":
				TAGT = browser.find_elements_by_xpath("//*[@id='WS2m']/div["+NUMBER+"]/div[1]/h3/a")
				TAGL = browser.find_elements_by_xpath("//*[@id='WS2m']/div["+NUMBER+"]/div[1]/h3/a")

			if REQ == "title":
				print(TAGT[0].text)
			if REQ == "url":
				print(TAGL[0].get_attribute('href'))
	finally:
		browser.quit()

これを check.py という名前でChromedriverと同じフォルダに配置します。

簡単に解説すると、以下の動作をします。

ツールの使い方

キーワードと検索したい順位を書いたファイル target.csv を用意します。
ファイルを以下のように記述します。

${指定順位} ${タブ} ${指定キーワード}
...

例えば以下のようなタスクがあったとします。

  • python というキーワードで 検索結果 2位 のタイトル
  • selenium というキーワードで 検索結果 3位 のタイトル

これらを調べたい場合は以下のように記述します。
適当にコピペしてこのファイルを作ってください。

2    python
3    selenium

次にコマンドプロンプトPowerShellを起動します。
その後以下のコマンドでツールが置いてある場所まで移動します。

cd ${ツールが置いてある場所}

以下のコマンドを実行します。
なお、引数は 調べたい内容に合わせて指定します。
yahoo で検索したければ google を yahoo に変更するだけですし、URLを取得したければ title を url に変更するだけです。

python check.py title google des

これで targer.csv に記述された内容を取得してきてくれます。
具体的には以下のような結果が得られます。

PS C:\Users\nknsh\Desktop\form_check> python .\check.py title google des
2       python
Pythonとは - python.jp
3       selenium
オープンソースの自動テストツール/Seleniumとは - OSS×Cloud News

得られた結果をランサーズのタスクの作業結果に張り付けて提出すれば完了です。
簡単ですね!

まとめ

  • ランサーズのタスクを自動化するツールを作成しました
  • 稼ぐ効率が上がりました
  • 今後アイデアがあれば改良していく予定です

気が向いたら ランサーズ に登録して楽して稼いでみましょう。

クラウドソーシングなら日本最大級の「ランサーズ」