node.js + seleniumでWordPressに自動ログインしてみるコードサンプルを載せておきます。
※この記事の見どころというかポイント
- UnhandledPromiseRejectionWarning: WebDriverError: unknown error: call function result missing ‘value’について
- とりあえずWordPreseに自動ログインするだけのコード。
- ヘッドレスモードはコメントアウト
それではみていきましょう。
WordPressに自動ログインするサンプルコード
const fs = require('fs'); const { promisify } = require('util'); 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` ] }); // awaitを使うので、asyncで囲む (async () => { // ブラウザ立ち上げ const driver = await new Builder().withCapabilities(capabilities).build(); // wordpressログイン画面に移動 await driver.get('wordpress_loginpage_url'); // 検索ボックスが表示されるまで待つ await driver.wait(until.elementLocated(By.id('user_login')), 10000); // ユーザー名の入力 await driver.findElement(By.id('user_login')).sendKeys('username'); // パスワードの入力 await driver.findElement(By.id('user_pass')).sendKeys('password'); // ログインボタンをクリック await driver.findElement(By.id('wp-submit')).click(); // ブラウザ終了 //driver.quit(); })();
- await driver.get(”)の値にはログインページのurlを指定
- .sendKeys(”)にはユーザー名とパスワードを指定
UnhandledPromiseRejectionWarning: WebDriverError: unknown error: call function result missing ‘value’ エラー
上記コードを実行してみると、いきなりはまりました。こちらの原因を調査したところ、以下のような文献を見つけました。
新しいChromeに対して古いWebDriverを利用していると実行時エラーになるようだった。
引用元: Chromeでunknown error: call function result missing 'value' となった場合、WebDriverを更新すると解決するかもしれない – Qiita
ということでしたのでChromeのWebドライバーを新しくしました。最新のChromeウェブドライバーを入手するには以下のサイトからダウンロードします。※最新版を使うようにしたらエラーが出なくなりました。
Downloads – ChromeDriver – WebDriver for Chrome
node.jsのSleniumリファレンス
seleniumはいろいろなプログラミング言語にむけて提供されていますが、やっていることは同じなのですが、構文が微妙に違います。今回やったのはnode.js用のselenium構文です。node.js用のseleniumリファレンスは以下のサイトです。
英語リファレンスでよくわからないなら、こちらが日本語で詳しく解説しているようで参考になります。
selenium-webdriverの紹介とAPI翻訳 – Qiita
※p.s(追伸) PHPがわかりません。※
この記事の情報は以上になります。
コメント