【体験談】IT企業の転職活動時に面接でウケが良かったエピソードをまとめる話
↑の続き。
万が一もう一回転職活動するときに自分で振り返れるようにメモ。
個人的な感覚な話になりますが、面接がうまくいった時はだいたい自分も気分が良いので面接をする側とそんなにギャップはない、はず。
転職理由 からの 社内ツールをたくさん作った話
まず、転職理由をざっくり下記のように話しました。
- 開発業務以外の業務が多すぎる (運用、カスタマーサポートなど)
- 開発に集中して取り組めるように普段の業務の省力化をするツールをたくさん作った
- それでも限界はあるので転職して開発をメインに働きたい
このような話をすると、大体ツールについて突っ込んでくれたので、作ったツールの説明をいくつかしました。
反応良かったのは下記の話です。
- カスタマーサポート業務で使う検証環境を用意するツールの開発、改善
- ansible の playbook を調整したりしてました
- 運用業務の定常作業を全てスクリプト化した
- シェルスクリプト、perl、python など、環境にあった言語でスクリプト作ってました
ansible とかは取っ付きずらいですが、慣れるととっても便利なことに気づいたので好きです。
なんとなくですが、playbook ちゃんとかける人は出来る人、な認識がある気がしました。
あとは言語にこだわりがあるわけではなく、状況に応じて色々書ける、も反応が良かったです。
業務以外に勉強している話
どの企業の面接でも大抵 「最近勉強していること」について聞かれました。
今実際に機械学習について勉強を進めていて、その話をすると結構反応が良かったです。
python で scikit-learn とか tensorflow とかで遊んでます! というと大体話が盛り上がってくれました。
うちではこんなことしてるよー、みたいな話もその場で聞けたりしたので楽しくお話ができました。
アイデアをもらえたりもしたのですごい良かったなと個人的にも感じてます。
勉強会の話
勉強会に出たりするのが好きだったので、
勉強会に参加してます!最近はこんな技術を知って面白かったです!
みたいな事を言ってました。
勝手に学んでくれる社員が居ると楽なんでしょうね、これも反応良かったです。
逆質問で会社の事を積極的に知る姿勢
なるべく質問をたくさんしました、質問すると大体一生懸命向こうが話してくれるのでなんとなく場の雰囲気が良くなりました。
下記の質問をよくしました。
社内の勉強会はどれぐらい開催されてますか?
勉強会がたくさん開催されるような、意欲的な社員が多い会社で働きたいと考えています。
みたいな話に持っていくようにしてました、実際そう思いますし。
機械学習を使ったプロジェクトはどのようなものがありますか?
機械学習関連のプロジェクトに配属されたら楽しそうだな、と思って質問してました。
やっぱり最近多い or 力を入れたいみたいで、色々教えてくれました。
こちらとしてはいい情報収拾ができたと思います。
上下の風通しは良く、下から意見が言いやすいと感じますか?
積極的に手をあげて発言したいです!みたいな話に持っていくようにしてました。
大体の企業でそういう人は大歓迎です、という事を言ってもらえました。
ご縁があって入社する場合、どのような技術を使ったプロジェクトに配属される可能性が高いですか?
せっかく個人で勉強するなら直近で役に立つ技術を学びたいです、みたいに話してました。
好きな事やってていいんじゃない?みたいな事を言われることが多かったですが、反応は悪くなかったと思います。
飲み会はありますか?
部署や上下関係なく情報交換の場があると嬉しいです、そういう場で出るアイデアはあると思います!
みたいな事を主張しましたw
実際そうだと思いますし、飲み会好きです!
面接の相手が偉い人であるほど好感触でした。
まとめ
転職活動を振り返って感触が良かったエピソードを書いてみました。
今考えると面接で色々喋ったりお話が聞けたりするのは合否に関わらず楽しかったな、と思います。
【体験談】IT企業の新卒3年目が転職活動を始めて転職先がIT企業に決まった話
↑の続き、無事転職先が決まりました。
どうやって転職活動してきたか、と結果はどうだったのかを書いていきます。
転職理由などは↑の記事をご参照ください。
転職活動の方法
リクルートエージェントのみ利用しました。
行き詰まったら他のエージェントも利用しようと考えていましたが、無事決まりました。
エージェントを通すと日程調整がものすごい楽でした。
転職活動の期間
6月半ばから7月半ばにかけての約1ヶ月間。
受けた企業と結果
最終的に応募した企業は10社でした。
選考辞退
- ベンチャーWeb系企業の開発エンジニア職
→ サービスがあまり好きになれなかったため辞退
- 大手コンサルの開発エンジニア職
→ 説明を聞いてコンサルが好きになれなかった、とりあえず今は手を動かしてものを作りたかったため辞退
書類落ち
- 広告代理店グループ企業のデータサイエンティスト職
→ 求めるスキルと経歴が異なるためお祈り
- インフラ系企業の開発エンジニア職
→ すでに募集人数が集まったためお祈り
- 動画サイト運営企業のデータサイエンティスト職
→ 求めるスキルと経歴が異なるためお祈り
- 受諾開発Sierの開発エンジニア職
→ 求めるスキルと経歴が異なるためお祈り
一次面接落ち
- 大手Web系企業の開発エンジニア職
→ 入社の熱意が感じられない + サービスについての理解が浅いためお祈り
- ベンチャーWeb系企業の開発エンジニア職
→ 即戦力が必要であり、経験が浅いと判断したためお祈り
内定
- 大手特別派遣企業の開発エンジニア職
→ 派遣はしんどいかも、と判断して辞退
- ベンチャー 受諾+Web系企業の開発エンジニア職
→ 内定受諾、9月から働きます
一番しんどかったこと
一番しんどかったことは書類落ちでも面接がうまくいかなかったことでもなく、現職での退職交渉でした。
ここまで育てていただき、ろくに成果もあげずに退職する、という自責が一番大きいです。
;; もちろん小さな成果はあったと自負していますが、期待に応えられていたかというとそうではなかったです。
新卒入社の若手が辞める、というのは少なからず他メンバーに影響を与えることであり、
特に売り手市場を呼ばれる今のご時世は会社に大きな打撃を与える、という話を上司にされました。
そういった意味でも会社に迷惑をかけてしまいました。
また、一緒に働くメンバーが良い人たちでゆったりと働けていたので、その人たちと働けなくなるのも少し心苦しいです。
まあ転職すると決めたのは私自身なので自業自得ですし、いずれはやめていたと思うので後悔はしていませんが。
一番しんどい場面はこれらの理由から 退職交渉でした。
その他ちょっとした感想
- 新卒3年目はポテンシャル重視の企業と即戦力重視の企業とどちらもある
規模の小さい企業は即戦力を求めているのを強く感じました。
逆に大企業は余裕があるからか、今後ののびしろを重視するのを感じました。
- Web系の企業は自社サービスを好きになれるかを重視する感がある
どのWeb系企業でも面接の時にそう感じました。
どういうサービスに関わりたいか、なぜうちのサービスに関わりたいのかをとにかく深掘りされました。
やはり作るサービスは好きでないとモチベーションが続かないからでしょうか。
あとは私が受けた企業は開発エンジニアがサービスの企画をするようなところのみでしたので、自社サービスが好きでないと企画で大きくつまづくのではないか、という判断もあったのではないかと推測しています。
- エージェントは便利
面接の日程調整に加え、期限付きの適性検査などのリマインドメールも送ってくれました。
完全に見落としていたので非常に助かりました。
また、企業ごとの面接対策の資料をもらえるのも助かりました。
よく聞かれる質問集などがもらえたのである程度準備ができました。
- モチベーションの維持は結構大変
予想はしていましたが、落ちると落ち込みます。
ここに行きたい、と思っていた企業に落ちると結構心にダメージがくるので心構えは大事だなと思いました。
落ちた際のモチベーションを保つのが少し大変でした。
- 個人での学習はかなりポジティブな印象をつけられる
仕事以外に開発、勉強しています、というアピールがかなり強力に効いたと感じました。
どの企業も自主的に楽しく勉強してくれるエンジニアを求めているんだな、と思いました。
今後の話
あと2週間ぐらい働いて引き継ぎや文書化作業をします。
その後8月末まで有休消化します。
有給消化期間中はクラウドソーシングで仕事受けたり、個人の開発や勉強に時間を当てる予定です。
有休消化ヤッホイ!
【体験談】IT企業の新卒3年目が転職活動を始めた話
転職活動を始めたので現状まとめとどうやってやってるかの話。
きっと今のご時世転職する人が多いと思うので、こうやって進めてる人もいるんだよ、の参考になれば嬉しい!
現職となんで辞めるのか
- 現職
- 大学院卒業後に新卒で入社して今3年目
- システム運用の会社で開発やってる
- 一日の仕事の内容は 開発 2 : カスタマーサポート 7 : 企画もどきの会議やその他雑務 1
- 辞める理由
- 開発がやりたい、新しいフレームワークとか触ってみたい
- カスタマーサポートの比率おかしいでしょ!開発がいい!っと思って半年前に転職を決意
スキルとこれまでやってきたこと
- 言語経験
- Python 1年 (opencv とか numpy で数値解析とか画像処理をやった)
- Java 1ヶ月ぐらい (読めるけどそんな書いたことないぐらい)
- PHP と Javascript 2年 (不動産会社のホームページの裏っかわ作ってた)
- 資格
- 応用情報とデータベーススペシャリストとセキュリティスペシャリスト持ってる (セスペは更新しないからもうなくなるけど)
- 業務
- 新規サービスの立ち上げのメンバーとしてPythonで画像処理やったり
- カスタマーサポートして既存サービスのバグフィックスしたり(PerlとかPHPで書かれたアプリ)
- 英語
- 英語のドキュメントは業務で読む
- チャットでスペイン人と話してる、意味は通じてるらしいので多分大丈夫
目指してる企業
- コードをいっぱい書けるとこ(できたらPythonがいいけど抵抗無いからなんでも大丈夫)
- 社員同士飲みに行ったりして仲が良く風通しの良い企業
- 給料は少しぐらいは下がっても大丈夫だけどあんまり下がるとちょっと・・・
転職方法
最近本格的に転職活動を始めようと決意してリクルートエージェントに登録しました。
エージェントさまと面談して、意向を伝えると色々紹介してくれた。
新卒の時の就職活動より楽!
現状と所感
- 現状
- リクルートエージェントのサービス使ってぽちぽちブラウザから企業に応募した
- 10社ぐらいWeb系や受託系の会社に応募して半分落ちて半分書類通ったところ
- 面接は2社行った、一つは通って一つはお祈り
- エージェントについて
リクルートエージェントは頼りになる(日程調整が楽、希望を伝えると企業を提案してくれる)。
他のエージェントはまだ登録しないでしばらくやってみる予定。
- 大変なところ
正直仕事しながら転職活動は大変。
17:00 で早上がりして 18:00 から面接、とかで頑張ってるけど早上がりすると少し職場の空気が悪くなりそうで怖い。
- 楽しいところ
企業のホームページとか採用ページとか事業内容とかをみると、今まで無かった目線で見れるのでちょっと楽しい。
自分のスキルや今までやってきたことを整理するので少し達成感。
これからの進め方
9月1日に転職したいので、そのつもりで進める。
とりあえず不満は無いので今の所はリクルートエージェントを使い続ける。
【CentOS7】 django で hello world をする話
CentOS7 上の python のフレームワーク django で hello 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 が応答することを確認できました。
アプリケーションを作る
アプリケーションを作成するには プロジェクトディレクトリの 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 アプリケーションが正しく応答することが確認できました。
おわりに
django で hello world をしました。
python 学習は以下の書籍がオススメです。
体系的に勉強するならまず買っておいて損は無いでしょう。
私は大分慣れた今でもバイブル代わりに使ってます。
django については英語の書籍ですが以下がオススメです。
内容が充実しているので一冊持っておくと役に立ちます。
【CentOS7】 django をインストールする話
CentOS7 に python のフレームワーク django をインストールした話です。
django とは
python の Webアプリケーションフレームワークです。
非常に多機能であり、フルスタックフレームワークと称されることもしばしば。
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 のインストールが完了し、動作する環境が整いました。
Wordpressのセキュリティチェックツール WPScan の使い方の話
Wordpressのセキュリティチェックツール WPScan の使い方を解説する話です。
WPScan とは
WPScan とはWordPressをインターネット経由でセキュリティチェックしてくれるツールです。
インターネット経由なので、WordPressのサイトにどの様な脆弱性が潜んでいるのかを、攻撃者の立場で知ることができます。
今回の記事ではわざとバージョンの低いWordPressサイトを用意して、それに対してWPScanを実行してみます。
WPScanをインストールする
サーバにWPScanをインストールします。
手順は基本的に公式サイトhttps://wpscan.org/ を参考に作成しました。
インストールするサーバは AWS(Amazon Web Service)上の Amazon Linux を対象としました。
(Amazon Linux は RHEL や CentOS と似てるので、これらでも以下の手順でできると思います。)
まず 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
以上でインストールが完了しました。
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 を使うと外部からのセキュリティチェックを実施することができます。
また、オプションも色々あり、攻撃を仕掛けたりログインを総当たりのパスワードで試みたり、ということもできます。
攻撃者のツールとしても使うことができてしまいますね。(やめてください。)
ランサーズでタスクを(半)自動化した話【体験談】
クラウドソーシングサービス「ランサーズ」で、作業を(半)自動化した話です。
他のランサーズの記事の続きなので、良ければこちらもどうぞ。
↓ ↓ ↓
概要
前回までの記事でタスクをひたすらこなしましたが、さすがに億劫になってきたので自動化しました。
対象のタスクは 検索結果の調査 で 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を選んでダウンロード、インストールしましょう。
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と同じフォルダに配置します。
簡単に解説すると、以下の動作をします。
- Chromedriverを使って、 http://www.google.com か http://www.yahoo.co.jp を Chrome で開く
- 同一ディレクトリの target.csv に記述された条件で キーワード検索を行う
- 検索結果が得られたら指定順位のタイトルもしくはURLを取得して出力する
- 繰り返し...
ツールの使い方
キーワードと検索したい順位を書いたファイル target.csv を用意します。
ファイルを以下のように記述します。
${指定順位} ${タブ} ${指定キーワード} ...
例えば以下のようなタスクがあったとします。
これらを調べたい場合は以下のように記述します。
適当にコピペしてこのファイルを作ってください。
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
得られた結果をランサーズのタスクの作業結果に張り付けて提出すれば完了です。
簡単ですね!