質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

Q&A

0回答

2997閲覧

SeleniumでのElementの待機【Node.js】

YOS_G-sepc

総合スコア29

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

0グッド

0クリップ

投稿2019/07/21 12:09

編集2019/07/21 12:16

前提・実現したいこと

Node.jsでのSeleniumの操作において、Elementの待機処理の実現。
python/C#におけるWebDriverWait相当の機能の使用。

発生している問題・エラーメッセージ

Node.js版のSelenium APIにWebDriver.waitメソッドがあるとのことで、
Elementの待機処理を行おうとしているのですが、下記エラーが発生してます。

errormeseage

1DevTools listening on ws://127.0.0.1:51721/devtools/browser/b68030de-2650-4cca-bc46-1be4096258e5 2(node:11936) UnhandledPromiseRejectionWarning: NoSuchElementError: no such element: Unable to locate element: {"method":"css selector","selector":"*[id="user_email"]"} 3 (Session info: chrome=75.0.3770.100) 4 (Driver info: chromedriver=75.0.3770.90 (a6dcaf7e3ec6f70a194cc25e8149475c6590e025-refs/branch-heads/3770@{#1003}),platform=Windows NT 10.0.17763 x86_64) 5 at Object.checkLegacyResponse (C:\Program Files (x86)\Nodist\bin\node_modules\selenium-webdriver\lib\error.js:546:15) 6 at parseHttpResponse (C:\Program Files (x86)\Nodist\bin\node_modules\selenium-webdriver\lib\http.js:509:13) 7 at C:\Program Files (x86)\Nodist\bin\node_modules\selenium-webdriver\lib\http.js:441:30 8 at processTicksAndRejections (internal/process/task_queues.js:89:5) 9From: Task: WebDriver.findElement(By(css selector, *[id="user_email"])) 10 at thenableWebDriverProxy.schedule (C:\Program Files (x86)\Nodist\bin\node_modules\selenium-webdriver\lib\webdriver.js:807:17) 11 at thenableWebDriverProxy.findElement (C:\Program Files (x86)\Nodist\bin\node_modules\selenium-webdriver\lib\webdriver.js:1014:17) 12 at C:\Users\YOS_G-spec\Desktop\jackDeck\jackAuto\selenium_js.js:18:22 13 at C:\Program Files (x86)\Nodist\bin\node_modules\selenium-webdriver\lib\webdriver.js:938:14 14 at TaskQueue.execute_ (C:\Program Files (x86)\Nodist\bin\node_modules\selenium-webdriver\lib\promise.js:3084:14) 15 at TaskQueue.executeNext_ (C:\Program Files (x86)\Nodist\bin\node_modules\selenium-webdriver\lib\promise.js:3067:27) 16 at C:\Program Files (x86)\Nodist\bin\node_modules\selenium-webdriver\lib\promise.js:2974:25 17 at C:\Program Files (x86)\Nodist\bin\node_modules\selenium-webdriver\lib\promise.js:668:7 18 at processTicksAndRejections (internal/process/task_queues.js:89:5) 19From: Task: <anonymous> 20 at pollCondition (C:\Program Files (x86)\Nodist\bin\node_modules\selenium-webdriver\lib\promise.js:2195:19) 21 at C:\Program Files (x86)\Nodist\bin\node_modules\selenium-webdriver\lib\promise.js:2191:7 22 at new ManagedPromise (C:\Program Files (x86)\Nodist\bin\node_modules\selenium-webdriver\lib\promise.js:1077:7) 23 at ControlFlow.promise (C:\Program Files (x86)\Nodist\bin\node_modules\selenium-webdriver\lib\promise.js:2505:12) 24 at C:\Program Files (x86)\Nodist\bin\node_modules\selenium-webdriver\lib\promise.js:2190:22 25 at TaskQueue.execute_ (C:\Program Files (x86)\Nodist\bin\node_modules\selenium-webdriver\lib\promise.js:3084:14) 26 at TaskQueue.executeNext_ (C:\Program Files (x86)\Nodist\bin\node_modules\selenium-webdriver\lib\promise.js:3067:27) 27 at C:\Program Files (x86)\Nodist\bin\node_modules\selenium-webdriver\lib\promise.js:2974:25 28 at C:\Program Files (x86)\Nodist\bin\node_modules\selenium-webdriver\lib\promise.js:668:7 29 at processTicksAndRejections (internal/process/task_queues.js:89:5) 30From: Task: <anonymous wait> 31 at scheduleWait (C:\Program Files (x86)\Nodist\bin\node_modules\selenium-webdriver\lib\promise.js:2188:20) 32 at ControlFlow.wait (C:\Program Files (x86)\Nodist\bin\node_modules\selenium-webdriver\lib\promise.js:2517:12) 33 at thenableWebDriverProxy.wait (C:\Program Files (x86)\Nodist\bin\node_modules\selenium-webdriver\lib\webdriver.js:934:29) 34 at wait (C:\Users\YOS_G-spec\Desktop\jackDeck\jackAuto\selenium_js.js:13:37) 35 at C:\Users\YOS_G-spec\Desktop\jackDeck\jackAuto\selenium_js.js:18:8 36 at processTicksAndRejections (internal/process/task_queues.js:89:5) 37(node:11936) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1) 38(node:11936) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

該当のソースコード

js

1"use strict"; 2const rl=require("readline").createInterface(process.stdin,process.stdout); 3const util=require("util"); 4const setTimeoutp=util.promisify(setTimeout); 5const {Builder,By,Key,until}=require("selenium-webdriver"); 6 7const g=async function*(res){ 8 var E_MAIL =yield rl.question("E-MAIL : ",res); 9 var PASSWORD=yield rl.question("PASSWORE: ",res); 10 11 const driver=new Builder().forBrowser("chrome").build(); 12 13 const wait=async ele=>await driver.wait(ele,1000); 14 await driver.get("https://paiza.jp/paizajack/"); 15 16 await driver.findElement(By.id("lp_login_btn")).click(); 17 18 await wait(drv=>drv.findElement(By.id("user_email"))); 19 //ここでエラー 20 21 await driver.findElement(By.id("user_email")).sendKeys(E_MAIL); 22 await driver.findElement(By.id("user_password")).sendKeys(PASSWORD); 23 await driver.findElement(By.name("commit")).click(); 24}(v=>g.next(v)); 25g.next();

C#/Pythonの下記プログラムと全く同じ動作を実現したいです。

c#

1using System; 2using System.Threading; 3using OpenQA.Selenium; 4using OpenQA.Selenium.Chrome; 5using OpenQA.Selenium.Support.UI; 6 7class Program{ 8 static void Main(){ 9 Console.Write("E-Mail :"); 10 var E_MAIL =Console.ReadLine(); 11 Console.Write("PASSWORD:"); 12 var PASSWORD=Console.ReadLine(); 13 14 var driver=new ChromeDriver(); 15 Func<Func<IWebDriver,IWebElement>,IWebElement> wait= 16 ele=>new WebDriverWait(driver,TimeSpan.FromSeconds(10)).Until(ele); 17 18 driver.Url=("https://paiza.jp/paizajack/"); 19 20 driver.FindElement(By.Id("lp_login_btn")).Click(); 21 22 wait(drv=>drv.FindElement(By.Id("user_email"))); 23 driver.FindElement(By.Id("user_email")).SendKeys(E_MAIL); 24 driver.FindElement(By.Id("user_password")).SendKeys(PASSWORD); 25 driver.FindElement(By.Name("commit")).Click(); 26 } 27}

Python

1import time 2from selenium import webdriver 3from selenium.webdriver.support.ui import WebDriverWait 4from selenium.webdriver.support import expected_conditions as EC 5from selenium.webdriver.common.by import By 6from selenium.webdriver.common.keys import Keys 7from selenium.webdriver.common.alert import Alert 8 9E_MAIL =input("E-MAIL :") 10PASSWORD=input("PASSWORD:") 11 12driver=webdriver.Chrome() 13wait=lambda ele:WebDriverWait(driver,10).until(ele) 14 15driver.get("https://paiza.jp/paizajack/"); 16 17driver.find_element_by_id("lp_login_btn").click() 18wait(lambda drv: drv.find_element_by_id("user_email")) 19driver.find_element_by_id("user_email").send_keys(E_MAIL) 20driver.find_element_by_id("user_password").send_keys(PASSWORD) 21driver.find_element_by_name("commit").click()

補足情報(FW/ツールのバージョンなど)

Windows10 x64

C:>node -v
v12.4.0
C:>chromedriver -v
ChromeDriver 75.0.3770.90 (a6dcaf7e3ec6f70a194cc25e8149475c6590e025-refs/branch-heads/3770@{#1003})
C:>npm list --depth-0 -g selenium-webdriver
C:\Program Files (x86)\Nodist\bin
`-- selenium-webdriver@3.6.0

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問