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

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

新規登録して質問してみよう
ただいま回答率
85.46%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

selenium

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

Q&A

解決済

1回答

848閲覧

「n秒ごとに実行」について

batc

総合スコア18

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

selenium

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

0グッド

0クリップ

投稿2021/05/30 07:07

編集2021/05/30 07:31
import java.util.TimerTask; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class Run extends TimerTask{ static int counter = 0; boolean judge = false; boolean bool = false; public void run() { System.setProperty("webdriver.chrome.driver", "chromeDriver/chromedriver.exe"); WebDriver driver = new ChromeDriver(); if(!this.judge) { driver.get("https:www.nicovideo.jp/watch/sm1"); } if(!(driver.findElement(By.xpath("/html/body/div[3]/div[1]/section[1]/h1")).isDisplayed())) { bool = true; } else{ System.out.println(counter); judge = true; counter++; driver.get("https://www.nicovideo.jp/watch/sm"+String.valueOf(counter)); } } } import java.util.Timer; public class Test { public static void main(String args[]) { Run r = new Run(); Timer ti = new Timer(); if(!r.bool) ti.schedule(r,0,5000); } }

このコードでニコニコ動画最古の動画を探そうと思ったのですが、なぜかうまくいきません。恐らくTimer,TimerTaskクラスが原因だと思うのですが、どこか間違えはありますか?またseleniumに詳しい方が居たら、ブラウザを一回立ち上げただけでそのブラウザ内で定期実行をできる方法を教えてほしいです。

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

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

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

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

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

1T2R3M4

2021/05/30 07:12

なぜMarkdownを使用しないのですか。 嫌がらせですか。
guest

回答1

0

ベストアンサー

このコードでニコニコ動画最古の動画を探そうと思ったのですが、なぜかうまくいきません。

それが目的ならばプログラムを書くまでもありません。
APIがありますので下のようなクエリを出すだけです(startTimeの根拠は特になし)

https://api.search.nicovideo.jp/api/v2/snapshot/video/contents/search?q=&filters[startTime][lt]=2007-04-01T00:00:00%2B09:00&_sort=%2BstartTime&fields=contentId,startTime,title&_limit=1

ニコニコ動画 投稿日時が一番古いやつ

ニコニコ動画 『スナップショット検索 v2 API』 ガイド


恐らくTimer,TimerTaskクラスが原因だと思うのですが、どこか間違えはありますか?

いろいろおかしい気がしますが、どう説明すればいいのかわからないので動いたコードを提示します^^;

Java

1import java.util.Timer; 2import java.util.TimerTask; 3 4import io.github.bonigarcia.wdm.WebDriverManager; 5import org.openqa.selenium.By; 6import org.openqa.selenium.NoSuchElementException; 7import org.openqa.selenium.WebDriver; 8import org.openqa.selenium.chrome.ChromeDriver; 9 10public class Run extends TimerTask { 11 public static void main(String[] args) { 12 Timer timer = new Timer(); 13 timer.schedule(new Run(timer), 0, 5000); 14 } 15 16 private Timer timer; 17 private WebDriver driver; 18 private int counter; 19 private By error = By.xpath("/html/body/div[3]/div[1]/section[1]/h1"); 20 21 Run(Timer timer) { 22 this.timer = timer; 23 24 // セットアップが面倒だったのでWebDriverManagerを使いましたが元のコードでも構いません。 25 WebDriverManager.chromedriver().setup(); 26 driver = new ChromeDriver(); 27 } 28 29 @Override public void run() { 30 String url = "https://www.nicovideo.jp/watch/sm" + ++counter; 31 driver.get(url); 32 33 try { 34 // 見つからなかったら例外 35 driver.findElement(error); 36 } catch (NoSuchElementException e) { 37 // エラー文言が見つからない=動画があった 38 System.out.println(url); 39 driver.quit(); 40 timer.cancel(); 41 } 42 } 43}

投稿2021/05/30 09:58

TN8001

総合スコア9363

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問