ロフトワークの今を伝えるブログメディア

常時SSL化を依頼されたときに役立つブラウザ自動操作術

常時SSL対応をしたときに、ウェブサイト全てのページで問題がないことをどうやってテストしますか?
1ページずつ「https://」でアクセスして、ブラウザのURL欄に警告がでないことを確認するとかでしょうか。

Webサイトの常時SSL化に失敗しないエラーチェックと対応方法

それでもいいのですが、1000ページ規模のサイトになると大変です。
仮に、1ページのチェック(ページを開く、目視チェック、結果を記録)に30秒かかるとして考えてみましょう。

 

30秒x1,000ページ=30,000秒=500分=8.3時間

 

もう、1日仕事ですね。
もし、これを弊社のディレクターがチェックするとか言いだしたら殴ってでも止めます(いや殴りませんが)。
とはいえ、個人的に時間もお金もない労力をかけられないので、ちょっとしたプログラムを書いて対応しています。

要約

 require "selenium-webdriver"
 @driver = Selenium::WebDriver.for :chrome
 @driver.get(ssl_url)
 puts(@driver.manage.logs.get(:browser))

 

RubyでWebブラウザの自動操作ライブラリSeleniumを使い、下記ようにチェックを自動化します。

  • URLのリストをつくる
  • URLのhttpをhttpsに変換
  • SeleniumでURLをブラウザ(Chrome)で開く
  • ChromeのDeveloperToolのConsoleに記述されるログを取得
  • “Mixed Content”という表記を検索

「Mixed Content」という表記が見つかったページをチェックして「http://」でアクセスしてるものを修正します。

 

先日、「【MT東京-39】まだ間に合う!常時SSL化対策」というイベントに参加したときに、ホスティング会社さんやウェブ制作会社さんに聞いても、このツール使えば簡単にチェックできるよって話が出なかったので、自分のやり方が間違ってないかどうか心配になって即興で、このテストのデモを見てもらいました。

間違ってなかったようで安心しましたが、改めて「mixed content check」で検索したら、いくつか出てきたので紹介しておきます。

Seleniumで常時SSL化対応のテストを省力化

httpsサイトにhttpリソースが混在していないかPHP + Selenium WebDriverでチェックする

Python + PhantomJSで「mixed content チェッカー」を作ってみた

https-mixed-content-check

他にもっと良い方法があったら教えてくださいね。

 

全文(ではありません)

require "sitemap-parser"
require "selenium-webdriver"
require "rspec"
include RSpec::Expectations
# log File
LOG_FILE = "log.txt"
describe "MixedContentCheck" do
before(:each) do
@driver = Selenium::WebDriver.for :chrome
@sitemap = "http://ドメイン/sitemap.xml"
@accept_next_alert = true
@driver.manage.timeouts.implicit_wait = 10
@verification_errors = []
end
 〜〜略〜〜
it "mixed_content_check" do
File.open(LOG_FILE, "w") do |f|
f.puts(@sitemap)
end
puts "START"
sitemap = SitemapParser.new(@sitemap)
sitemap.to_a.each_with_index { |url, i|
#next if i <= 10
url.gsub!(/http:\/\//, "https://")
@driver.get(url)
File.open(LOG_FILE, "a") do |f|
f.puts("#{i} : #{url}")
f.puts(@driver.manage.logs.get(:browser))
f.puts("-------------------")
end
puts "#{i} : #{url}"
#break if i == 10
}
puts "END"
end
 〜〜略〜〜
end

最近、クローリングやスクレイピングは、Pythonの方が楽だと分かり勉強し直しています。

 

なお、私はカスタムフィールド製造業の刺身の上にタンポポをのせる係ですので、プログラムが動かないとか難しいことは聞かないでください(ΦωΦ)

川竹 敏晴 川竹 敏晴

大学卒業後、システム開発会社にエンジニアとして勤務。Java等を用いて大小様々なWeb系システムを開発。その後、Web制作会社にて数多くのCMS導入案件の開発を担当したのち、2011年にロフトワーク入社。主にCMS導入案件の技術的なサポートを担当している。自他共に認めるCMS好きで、日々新しいCMSの研究を行なっている。>>プロフィール詳細

関連記事