CentOS xfvb Selenium

Ruby + selenium2

<Xfvb インストール>
http://qiita.com/kamekichi0527/items/70ef040544e65faa4fe0
http://dotnsf.blog.jp/archives/2924133.html
http://blog.ekos.biz/2013/12/phpfirefox.html

ruby gem の準備。
# yum -install ruby ruby-devel

locate コマンド(mlocate)の準備。
# yum install mlocate
updatedbを実行してmlocate.dbを生成する。
# updatedb

フォントもインストール。
# yum -y groups install "X Window System"
# yum -y install xorg-x11-server-Xvfb firefox
# yum -y install ibus-kkc vlgothic-*

~/.bash_profile
—-
export DISPLAY=:1
—-
(または $ export DISPLAY=1)

ユーザで Xvfb起動。
$ Xvfb :1 -screen 0 1024x768x24 &

<CentOS7 に chromium をインストール>
repo 追加。

CentOS 7にChromiumブラウザをインストールする

# wget http://download.opensuse.org/repositories/home:/andykimpe/CentOS_7/home:andykimpe.repo
# mv home:andykimpe.repo /etc/yum.repo.d/andykimpe.repo

repo を確認。
# yum repolist all
—-
….
home_andykimpe                               andykimpe beta zpanel (CentOS_7)
—-
# yum install chromium –enablerepo=home_andykimpe

Xvfb が起動しているところで、chromium を起動。
$ chromium-browser
エラー…
—-
[1:1:0705/185430:ERROR:image_metadata_extractor.cc(106)] Couldn't load libexif.
Xlib:  extension "RANDR" missing on display ":1".
—-

いったん、Xfvb を停止。
$ jobs
—-
[1]+  実行中               Xvfb :1 -screen 0 1024x768x24 &
—-
$ fg
(ctrl-c)

libexif がにないというので、x-window関連をインストール。
# yum install x11vnc
# yum groupinstall "Desktop" General Purpose Desktop"
(# yum –enablerepo=epel -y groups install "Xfce")
これで、libexif のエラーは消える。

Xfvb に -extension をつけて再起動。
$ Xvfb :1 -screen 0 1024x768x24 -extension RANDR &
でも"RANDR"のエラーが消えない…これは未確認。
とりあえず chromium は動くようです。

<selenium-webdriver をインストール>
http://qiita.com/kamekichi0527/items/70ef040544e65faa4fe0

# gem install selenium-driver

ruby のパーサが必要なら
# gem install nokogiri
(エラーが出たら http://qiita.com/chobi9999/items/7b66677b3bf3da8acc14 )
—-
Running 'patch' for libxml2 2.9.2… ERROR, review '/usr/local/share/gems/gems/nokogiri-1.6.6.2/ext/nokogiri/tmp/x86_64-redhat-linux-gnu/ports/libxml2/2.9.2/patch.log' to see what happened.
—-
ということで
# yum -y install libxml2 libxslt libxml2-devel libxslt-devel
# gem install nokogiri — –use-system-libraries


そして selenium に chromeDriver をインストール。以下から探して
http://chromedriver.storage.googleapis.com/index.html
$ wget http://chromedriver.storage.googleapis.com/2.9/chromedriver_linux64.zip
$ unzip chromedriver_linux64.zip

解凍された"chromedriver"をパスの通ったところに移動。
# mv chromedriver /usr/local/bin/

<php の場合>
https://github.com/facebook/php-webdriver/wiki/ChromeDriver
http://ericlondon.com/2012/09/23/headless-selenium-testing-in-php-and-ruby-on-ubuntu.html
https://code.google.com/p/selenium/wiki/ChromeDriver

selenium を適当なディレクトリにダウンロード。
$ wget http://selenium.googlecode.com/files/selenium-server-standalone-2.25.0.jar

web-driver をインストール。(ライブラリなのでユーザで構わない)
$ git clone https://github.com/facebook/php-webdriver.git
(wget https://php-webdriver-bindings.googlecode.com/files/php-webdriver-bindings-0.9.1.zip
unzip php-webdriver-bindings-0.9.1.zip)
$ cd php-webdriver/

Xvfb が立ち上がっていなかったら起動する。
($ Xvfb :1 -screen 0 1024x768x24 -extension RANDR &)
java で selenium を起動。その際に chromedriver を指定。
$ DISPLAY=:1 java -jar ~/selenium/selenium-server-standalone-2.46.0.jar -Dwebdriver.chrome.driver=/usr/local/bin/chromedriver &

<php 実行ファイル>

まず、chrome を立ち上げるために(すごい時間がかかる)
$ php chromestart.php
—-
<?php
  namespace Facebook\WebDriver;
  use Facebook\WebDriver\Chrome\ChromeDriver;
  require_once('vendor/autoload.php');

  putenv("webdriver.chrome.driver=/usr/local/bin/chromedriver");
  $driver = ChromeDriver::start();
—-

ここからwebdriver として扱う。
$ php test.php
—-
<?php
// An example of using php-webdriver.

namespace Facebook\WebDriver;

use Facebook\WebDriver\Remote\DesiredCapabilities;
use Facebook\WebDriver\Remote\RemoteWebDriver;
use Facebook\WebDriver\Chrome\ChromeDriver;
use Facebook\WebDriver\Chrome\ChromeOptions;

require_once('vendor/autoload.php');

$host = 'http://localhost:4444/wd/hub'; // this is the default
$capabilities = DesiredCapabilities::htmlUnitWithJS();
{
  // For Chrome
  $options = new ChromeOptions();
  $prefs = array('download.default_directory' => '/tmp');
  $options->setExperimentalOption('prefs', $prefs);
  $capabilities = DesiredCapabilities::chrome(); 
  $capabilities->setCapability(ChromeOptions::CAPABILITY, $options);
}
$driver = RemoteWebDriver::create($host, $capabilities, 5000);

$driver->get('http://www.jleague.jp/match/j2/2015/070811/live');
#echo $driver->getTitle();
echo $driver->getPageSource();

$driver->quit(); # これがないと ps chrome がどんどん作られる。
—-

chrome を閉じる方法あるのか?

 


<ruby の場合>
ruby は
$ ruby test.rb
以下、確認済みの ruby

test.rb
—-
# coding: utf-8
require 'rubygems'
require 'open-uri'
require 'selenium-webdriver'
require 'uri'

# 検索条件設定
search_word = "ワールドカップ"

# selenium設定
driver = Selenium::WebDriver.for :chrome
driver.navigate.to "http://google.com"

# 検索結果取得
begin
  element = driver.find_element(:name, 'q')
  element.send_keys search_word
  element.submit
  #ここでスリープしないと結果がうまくとれなかった。
  sleep 5
rescue
  #なんか失敗したらとりあえずfirefox修了
  driver.quit
end

puts "Page title is #{driver.title}"

driver.quit
—-

test1.rb
—-
# coding: utf-8
require 'rubygems'
require 'open-uri'
require 'selenium-webdriver'
require 'uri'

# 検索条件設定
search_word = "ワールドカップ"

# selenium設定
driver = Selenium::WebDriver.for :chrome
#driver.navigate.to "http://www.jleague.jp/match/j2/2015/070401/live"
driver.get("http://www.jleague.jp/match/j2/2015/070401/live")
# 検索結果取得
begin
        html_source = driver.page_source
        open("source.html", "w") {|f| f.write html_source}
        
  #ここでスリープしないと結果がうまくとれなかった。
  sleep 5
rescue
  #なんか失敗したらとりあえずfirefox修了
  driver.quit
end

puts "Page title is #{driver.title}"

driver.quit
—-

test2.rb (http://qiita.com/kamekichi0527/items/70ef040544e65faa4fe0)
—-
# coding: utf-8
require 'rubygems'
require 'open-uri'
require 'selenium-webdriver'
require 'nokogiri'
require 'uri'

# 検索条件設定
search_word = "ワールドカップ"

# selenium設定
driver = Selenium::WebDriver.for :chrome
driver.navigate.to "http://google.com"

# 検索結果取得
begin
  element = driver.find_element(:name, 'q')
  element.send_keys search_word
  element.submit
  #ここでスリープしないと結果がうまくとれなかった。
  sleep 5
rescue
  #なんか失敗したらとりあえずfirefox修了
  driver.quit
end

# 解析
html = driver.page_source
kaiseki_html = Nokogiri::HTML(html)
ranking_data =  kaiseki_html.css("div.rc").css("h3")

ranking_data.each do |site|
  puts site.css("a").attribute("href").value
end

driver.quit
—-

test3.rb (http://noboru.hatenablog.jp/entry/2013/12/12/234322)
—-
require 'rubygems'
require 'selenium-webdriver'

driver = Selenium::WebDriver.for :firefox
driver.get "http://google.com"

element = driver.find_element :name => "q"
element.send_keys "Cheese!"
element.submit

puts "Page title is #{driver.title}"

wait = Selenium::WebDriver::Wait.new(:timeout => 10)
wait.until { driver.title.downcase.start_with? "cheese!" }

puts "Page title is #{driver.title}"
driver.quit 
—-

<python>
http://stackoverflow.com/questions/7861775/python-selenium-accessing-html-source

<python Java>
https://sites.google.com/a/chromium.org/chromedriver/getting-started

<Java>

<PHP PHPUnit>
http://www.yann.com/en/use-xvfb-selenium-and-chrome-to-drive-a-web-browser-in-php-23/08/2012.html

CentOS上でSeleniumRCとPHPUnitを使ってfirefoxを操作する

Leave a Reply

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です