今回はSeleniumとnode.jsで、GoogleChromeを動かします。Seleniumの環境構築をして、最終的にQiitaのTOPページのテキスト「Hello hackers !」を取得します。
selenium-node.js

環境

  • CentOS7
  • GoogleChrome
  • node v8.15.1
  • npm 6.4.1

Seleniumの準備

今回はrootユーザーですべてのコマンドを実行します。また、コマンド実行中に【Is this ok [y/d/N]: y】が出たらすべて「y」でエンターキーを押してください。

Node.jsをインストールします。

# curl -sL https://rpm.nodesource.com/setup_8.x | sudo bash -
# yum install nodejs

各バージョンの確認をします。

# node -v
# npm -v

npmでseleniumを動かすために必要なものをインストールします。

# npm -g install selenium-webdriver
# npm -g install mocha
# npm -g install expect.js

chromeをインストールします。

# yum install -y libX11 GConf2 fontconfig
# vi /etc/yum.repos.d/google-chrome.repo

以下の内容をコピーして、貼り付けます。

[google-chrome]
name=google-chrome
baseurl=http://dl.google.com/linux/chrome/rpm/stable/x86_64
enabled=1
gpgcheck=1
gpgkey=https://dl.google.com/linux/linux_signing_key.pub

yumをアップデートします。

# yum update
# yum install google-chrome-stable

chromedriverをインストールします。

# wget https://chromedriver.storage.googleapis.com/2.37/chromedriver_linux64.zip

zipファイルを展開します。

# unzip chromedriver_linux64.zip

chromedriverをパスが通っている場所に移動します。

# mv chromedriver /usr/local/bin/

バージョンの確認をします。

# chromedriver -v

不要になったzipファイルを削除します。

# rm -fr chromedriver_linux64.zip

Seleniumの作業用ディレクトリを作成します。

# mkdir -m 777 /var/sele && cd /var/sele

test.jsファイルを新規作成します。

# vi test.js

jsのコードを書きます。

const webdriver = require('selenium-webdriver');
const { Builder, By, until } = webdriver;

const capabilities = webdriver.Capabilities.chrome();
capabilities.set('chromeOptions', {
    args: [
        '--headless',
        '--no-sandbox',
        '--disable-gpu',
        `--window-size=1980,1200`
    ]
});
(async () => {
    const driver = await new Builder().withCapabilities(capabilities).build();
    await driver.get('https://qiita.com/');
    let element = await driver.findElement({ css: '.nl-Hero_title' }).getText();
    console.log(element);
    await driver.quit();
})();

tets.jsファイルを実行して、Seleniumを動かします。

# node test.js

この時、何かが足りないようで以下のエラーが出ました。

module.js:550
    throw err;
    ^

Error: Cannot find module 'selenium-webdriver'
    at Function.Module._resolveFilename (module.js:548:15)
    at Function.Module._load (module.js:475:25)
    at Module.require (module.js:597:17)
    at require (internal/module.js:11:18)
    at Object. (/var/sele/test.js:1:81)
    at Module._compile (module.js:653:30)
    at Object.Module._extensions..js (module.js:664:10)
    at Module.load (module.js:566:32)
    at tryModuleLoad (module.js:506:12)
    at Function.Module._load (module.js:498:3)

エラーを解消するために、以下のコマンドを実行します。WARNが出ますが無視して問題ないです。

# npm i selenium-webdriver
npm WARN saveError ENOENT: no such file or directory, open '/var/sele/package.json'
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN enoent ENOENT: no such file or directory, open '/var/sele/package.json'
npm WARN app No description
npm WARN app No repository field.
npm WARN app No README data
npm WARN app No license field.

+ selenium-webdriver@4.0.0-alpha.1
added 30 packages from 69 contributors and audited 35 packages in 1.662s
found 0 vulnerabilities

再度、test.jsを実行します。

# node test.js

これで「Hello hackers !」が端末上に表示されました。