Seleniumのインストールと簡単な使い方
参考サイト
- http://daipresents.com/2012/webdriver%E3%81%A7chrome%E3%82%92%E8%B5%B7%E5%8B%95%E3%81%99%E3%82%8B%E3%81%A8unable-to-find-the-chromedriver-executable%E3%81%A8%E6%80%92%E3%82%89%E3%82%8C%E3%81%9F/
- http://morizyun.github.io/blog/selenium-scraping-webdriver-ruby/
- http://qiita.com/tomerun/items/9cb81d7a98150ff22f53
gemをインストールする。
gem install selenium-webdriver
起動と終了
driver = Selenium::WebDriver.for :firefox # ブラウザ起動 driver.quit # ブラウザ終了
:firefox のところは :ieとか:chromeとか:operaとか好きなのを
ページ、フレーム移動
driver.navigate.to 'http://example.com' # URLを開く driver.switch_to.frame(1) # 1つめの子フレームに移動 driver.switch_to.frame("frameid") # フレームのnameを指定して移動
要素を指定
element = driver.find_element(:name, 'calendar') # nameで指定 element = driver.find_element(:id, 'calendar') # idで指定 element = driver.find_element(:class, 'right_box') # classで指定 element = element.find_element(:tag_name, 'table') # 要素名で指定 element = element.find_element(:xpath, 'tr[2]/td[3]/a') # XPathで指定 element = driver.find_element(:class, 'body').find_element(:name, 'form').find_elements(:xpath, './/input')[2] # メソッドチェーン
DriverとElementがどちらもfind_element・find_elementsメソッドを持っている。
入力
# テキストフィールドへ入力・削除 element = driver.find_element(:name, 'userId') element.send_keys('username') element.clear # ドロップダウンリスト選択 select = Selenium::WebDriver::Support::Select.new(driver.find_element(:id, 'dropdown')) select.select_by(:value, 'item1') # valueの値で選択 select.select_by(:text, 'どちらでもない') # 表示テキストで選択 select.select_by(:index, 2) # インデックス(0始まり)で選択 # ラジオボタン選択 driver.find_elements(:name, 'selectOne')[2].click # リンクやボタンを押す driver.find_element(:xpath, '//table[2]/tr[3]/td[1]/a').click
情報取得
# 要素の内容テキスト puts element.text # Firefoxでダウンロードのリンクを踏んだとき保存確認ダイアログを出さずに指定のフォルダに保存 profile = Selenium::WebDriver::Firefox::Profile.new profile['browser.download.folderList'] = 2 profile['browser.download.useDownloadDir'] = true profile['browser.download.dir'] = 'path/to/downloadFolder' profile['browser.helperApps.neverAsk.saveToDisk'] = 'text/csv' driver = Selenium::WebDriver.for :firefox, :profile => profile # スクリーンショットを撮る driver.save_screenshot('path/to/filename.png')
chomeのプロフィール設定
prefs = { :download => { :prompt_for_download => false, :default_directory => "/path/to/dir" } } driver = Selenium::WebDriver.for :chrome, :prefs => prefs
macでchromeを指定するとエラーが出たので対応
ドライバーをダウンロードしてくる
http://chromedriver.storage.googleapis.com/index.html
ドライバにバスを通す
ln -s /path/to/chromedriver /usr/bin/chromedriver
とりあえず /user/bin/にシンボリックリンクを貼った 直接パス通す方法でもOK
フォルダを圧縮して自動バックアップするスクリプト
スクリプトを作成
vim images_backup.sh
images_backup.sh
#!/bin/sh # バックアップファイルを何日分残しておくか period='+7' # バックアップファイルを保存するディレクトリ dirpath='/path/to/backup/images' #バックアップ元フォルダ backupfolder="/path/to/from" # ファイル名を定義(※ファイル名で日付がわかるようにしておきます) mydate=`date +%y%m%d%H%M%S` filename="images_$mydate.tar.gz" #backup実行 tar -zcvf $dirpath/$filename $backupfolder # パーミッション変更 chmod 700 $dirpath/$filename # 古いバックアップファイルを削除 find $dirpath -type f -daystart -mtime $period -exec rm {} \;
SSH接続の公開鍵認証
参考サイト
秘密鍵と公開鍵を作成
ssh-keygen -t rsa
公開鍵を転送
scp id_rsa.pub user@hostname/.ssh
公開鍵を設定
mv ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
SSHで公開鍵認証を設定
sudo vim /etc/ssh/sshd_config
/etc/ssh/sshd_config
PubkeyAuthentication yes
sshdを再起動
sudo service sshd restart
公開鍵でSSH接続する
ssh user@hostname
FTPサーバーの設定
参考サイト
- http://easyramble.com/install-setup-fsftpd.html
- http://www.geocities.co.jp/SiliconValley-PaloAlto/3626/server_setting/vsftpd/20070126_vsftpd.htm
- http://www.aconus.com/~oyaji/suse/vsftpd_ssl_suse.htm
FTPサーバー導入の経緯
最近は、GitもしくはSFTPでのファイルのやりとりが多く、
普段、FTPってあんまり使わないのでFTPサーバーをインストールしていなかったのだが、
FTPを利用したいとのご要望があったので設定した。
折角なので、備忘録として記載しておくことに
vsftpd のインストール
sudo yum -y install vsftpd sudo service vsftpd start sudo chkconfig vsftpd on
で、後はポート開放して完了。
結構あっさりですね。
ただ、このまま使うにはあまりにも無防備すぎるのと、
今回のご要望は、SSL通信での利用を想定との事だったため、もう少し設定する。
一般設定
sudo vim /etc/vsftpd/vsftpd.conf
/etc/vsftpd/vsftpd.conf
anonymous_enable=NO # Anonymous FTP接続の禁止。 local_enable=YES # ローカルユーザのログインを許可。 write_enable=YES # 書き込み(Upload)許可。公開専用の場合はNOにすると書き込み禁止にできる。 local_umask=022 # ローカルユーザのumask値。 listen_port=21 # FTP制御チャンネルの接続待ち受けポートの指定。 # デフォルトポートの利用には抵抗がある connect_from_port_20=NO # Activeモード時のデータコネクションポートの指定。 # 今回はpasv接続にするのでNO。 nopriv_user=ftp # vsftpが利用する非特権ユーザ名の指定を ftp に指定。 chroot_local_user=YES # ローカルユーザの操作範囲を自身のホームディレクトリ内のみに行動を制限(chroot)する。 chroot_list_enable=NO # 「chroot_local_user=YES」とした場合にchrootしない例外ユーザを許可しないに指定。 # YESにした場合「chroot_list_file=/etc/vsftpd.chroot_list」を登録 ftpd_banner=Welcome to blah FTP service. # クライアントソフト名が表示されるのを変更
SSL関係設定
sudo vim /etc/vsftpd/vsftpd.conf
/etc/vsftpd/vsftpd.conf
rsa_cert_file=/etc/ssl/certs/vsftp.pem # vsftpd用の証明書ファイルの指定。SSL証明書の発行方法は省略 rsa_private_key_file=/etc/ssl/certs/vsftp.key # vsftpd用の秘密鍵ファイル rsa_cert_file=/etc/ssl/certs/ftp.pem # vsftpd用の証明書ファイルの指定。SSL証明書の発行方法は省略 use_localtime=YES # 時刻の扱いをローカルタイムにする。 userlist_enable=YES # ユーザリストによる規制をかける。 userlist_deny=YES # ユーザリストをログイン不可ユーザの一覧とする。(NOだとログイン可のユーザ一覧になる) userlist_file=/etc/ftpusers # ユーザリストの指定。 pasv_min_port=30000 # Pasv接続で外部からのコネクション利用を許可するポート範囲の最小値。 pasv_max_port=30100 # Pasv接続で外部からのコネクション利用を許可するポート範囲の最大値。 ssl_enable=YES # SSL接続の有効化 ssl_tlsv1=YES # vsftpd はSSLのプロトコルとして、SSL v2(ssl_sslv2)、SSL v3(ssl_sslv3)、TLS v1(ssl_tlsv1)の3種類をサポートしているが、デフォルトはTLS v1であり、多くの場合、この設定で問題ないのでデフォルトのままとする。 force_local_logins_ssl=YES # 制御チャンネル(ログイン等)でSSL接続しか許可しない。 force_local_data_ssl=YES # データチャンネルでSSL接続しか許可しない。
再起動で反映
sudo service vsftpd restart
net/http/response.rbのバグ修正
参考サイト
概要
Rubyでブログ投稿しようと頑張っていたら、ハマった。
xml-rpcで投稿していた所、
jugemやseesaaは問題なく投稿や情報の取得ができていたのだが、
FC2に投稿しようとするとエラーが出る。
Wrong size. Was 31564, should be 1501
いろいろ調べてみたらどうやらRubyの標準ライブラリの
net/http/response.rb
のバグらしい
https://github.com/ruby/ruby/pull/308/files
で修正パッチが記載してあったので、こちらを利用することに
他の対応方法
response.rb を書き換える方法ではなく、
libxml というライブラリを使う方法でも大丈夫なのだが、
今回は修正パッチの方法で対応
※railsでxml/libxml がないとか言われたり、関数の表現変わったりで面倒だったので
修正方法
rbenv version
で現在利用しているrubyのバージョンと場所を確認
.rbenv/versions/2.0.0-p247/lib/ruby/2.0.0/net/http
内の
response.rbを書き換える
修正箇所は参考URLを参照
rbenvでRubyをインストール
参考サイト
依存ライブリをインストール
sudo yum -y install gcc sudo yum -y install make sudo yum -y install openssl sudo yum -y install openssl-devel sudo yum -y install gcc-c++ sudo yum install -y mysql-devel
全ユーザーで共通のrbenvを利用
rubyグループを作成
sudo groupadd ruby sudo usermod -G wheel,ruby myuser sudo groups myuser
rbenvをインストール
cd /usr/local git clone git://github.com/sstephenson/rbenv.git rbenv mkdir rbenv/shims rbenv/versions rbenv/plugins cd rbenv/plugins git clone git://github.com/sstephenson/ruby-build.git ruby-build cd ruby-build ./install.sh cd /usr/local chgrp -R ruby rbenv chmod -R g+rwxX rbenv echo 'export RBENV_ROOT="/usr/local/rbenv"' >> /etc/profile.d/rbenv.sh echo 'export PATH="/usr/local/rbenv/bin:$PATH"' >> /etc/profile.d/rbenv.sh echo 'eval "$(rbenv init -)"' >> /etc/profile.d/rbenv.sh source /etc/profile.d/rbenv.sh echo $PATH
rubyをインストール
rbenv install --list rbenv install -v 2.0.0-p353 rbenv versions rbenv global 2.0.0-p353 rbenv rehash rbenv versions ruby -v
折角なのでgemをアップデート
gem update
ユーザー別のインストールする場合
rbenvをインストール
git clone https://github.com/sstephenson/rbenv.git ~/.rbenv echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile echo 'eval "$(rbenv init -)"' >> ~/.bash_profile exec $SHELL -l
確認
rbenv -v
nodebrewでNode.jsをインストール
curl https://raw.github.com/hokaccha/nodebrew/master/nodebrew | perl - setup # ユーザーディレクトリにインストールされるので、全ユーザーで利用する場合はrootでインストールして共通パス通すのがいいかも # ノードユーザー作って権限渡したほうが良い気がする useradd node cd /home/node chmod -R 777 /home/node echo 'export PATH="/home/node/.nodebrew/current/bin:$PATH"' >> /etc/profile.d/nodebrew.sh # echo 'export PATH="/home/node/.nodebrew/current/bin:$PATH"' >> /etc/profile.d/nodebrew.sh source /etc/profile.d/nodebrew.sh echo $PATH # ユーザー権限でも実行したい場合は実行グループ作って登録すれば大丈夫。
nodeグループを作成
groupadd node usermod -G wheel,node shuhei # usermod -G wheel,node,ruby shuhei groups shuhei
.nodebrewの所有グループを変更
cd /home/node chgrp -R node .nodebrew chmod -R g+rwxX .nodebrew
/home/nodeへの閲覧権限がなかったのでグループをwheelに変更
sudo chgrp wheel /root
インストール可能なバージョンの確認
nodebrew ls-all # 奇数バージョンは開発版、偶数バージョンが安定版らしい
インストール(バイナリからインストールしたほうが速い)
nodebrew install-binary v0.10.20 # インストールはユーザーディレクトリにされるっぽいのでノードユーザーでインストールする
利用するバージョンを変更
nodebrew use v0.10.20
現在のバージョンを確認
node -v