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

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

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

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

selenium

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

Q&A

解決済

2回答

324閲覧

seleniumによる時間指定でのChrome自動操作について

marooon99

総合スコア1

Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

selenium

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

0グッド

0クリップ

投稿2024/09/06 14:31

編集2024/09/06 14:43

seleniumを使用してChromeを自動操作しようと試みています。
全くの初心者ですが、自力で色々なサイトを見ながら、自分で「実行」を開始したタイミングで、①Chrome(真っ白)が起動 ②(およそ4秒後に)そのまま任意のURLに飛ぶ ところまではコードを作成することができました。
そこで、②において、指定した時間に任意のURLに飛びたい場合のコードを教えていただきたいです。
例)21:00より少し前に「実行」を開始、1度真っ白のChromeを起動させておき、21:00になるまで待機。21:00になったら任意のURLに飛ぶ。
もしくは、21:00より前に、あらかじめ任意のURLページを開いておき、21:00にそのページを更新(F5更新)することは可能でしょうか?そのコードも教えていただきたいです。

なお、パソコンはWindows、Chromedriverを使用、seleniumでコードを作成、Idel上で実行をしています。

あらかじめ、ログインが必要な操作をしたいため、自分で21時ピッタリに実行を開始すると約4秒のタイムロスがあるため、20:59:56に実行を開始するのでもいいですが、時間指定できればそれが1番いいなと思います。
初心者のため、あまり専門用語などは分かりません・・・。ご回答をいただけるのに、他に必要な情報があればおっしゃっていただけると幸いです。
何卒よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

コードが書かれてないので、一例の提示になりますが、

21:00になったら任意のURLに飛ぶ。

driver.get(URL)で、ブラウザのアドレスバーにURLを入力してEnterしたのと同じなので、
その前に指定時刻まで待つ処理を入れれば良いかと思います。
SeleniumやChromeのオーバーヘッドがあるので、get()実行からブラウザの画面が切り替わり始めるまで、どれくらいか(1秒未満のごくわずかだと思いますが)なんどかやって計測して、仮に0.1秒だとすると、20:59.59.9 とかまで待ってから、driver.get(URL)を実行ということになるかと思います。

待ち方はいろいろ考えられますが、現在時刻と希望時刻の差を秒単位で求めて、time.sleep(秒)するのが明快かと思います。引数の単位は秒ですが、小数も指定できるので、0.1秒単位くらいであれば調整も可能です。
秒数の計算にはdatetimeライブラリーを使うのですかね。
https://docs.python.org/ja/3/library/datetime.html
公式リファレンスだけではプログラムを書くのが難しければ、検索するとサンプルが見つかると思います。

21:00にそのページを更新(F5更新)することは可能でしょうか?

リロードは、driver.refresh()です。

get(URL)をする時刻を調整するのと、あらかじめget(URL)しておいてrefresh()する時刻を調整するのを比較すると、リロードだと、キャッシュにあるファイルの多くはサーバーまで取りに行かないはずなので、時間のブレが少ないかも知れません。

追記:時刻差を求めてその秒数待つというプログラム例

Python

1import datetime 2import time 3(中略) 4now = datetime.datetime.now() # この瞬間の日時。ミリ秒くらいまで求まる 5target = datetime.datetime(now.year,now.month,now.day, 21,0,0) # 本日の21:00:00 6wait = (target-now).total_seconds()-0.1 # 差を求めて秒単位で取得し、調整する時間分を引く 7# 「秒単位で取得」と言っても、残り2分ならtotal_seconds()は120になるので大丈夫。1秒未満の値も小数で付いている 8# print(now, target, wait) #確認したければprintする。printの分だけ時間がずれるので、本番ではprintしないほうがいいか 9if(wait>0): 10 time.sleep(wait) 11else: 12 # 時刻が過ぎている場合にエラーにするならここにそういうコードを書く 13 # エラーにせずに、直ちにgetするならelse部分は不要 14driver.get(URL)

回答前半で書いた「get()実行からブラウザの画面が切り替わり始めるまで」を仮に0.1秒だとして引いていますが、ここは実測して調整下さい。
遅れを実測してその時間を調整するのは、scheduleなど他の手段を使っても同じく必要ですね。
見たとおり、「23:00から翌日01:00まで待つなど」の日またがりは考慮してません。
厳密にはnowを求めてからsleepするまでのプログラム処理時間分だけずれますが、まあ、誤差未満ですかね。driver.getからブラウザ表示までの時間の方が長いはず。
また、sleepはOSのタイマーを使っているのでOSタイマー精度以上の精度は出ません。1ミリ秒とかは無理のようですが今回の目的だとそこまで要らないでしょうね。0.1秒とかは大丈夫。

投稿2024/09/06 16:36

編集2024/09/07 12:08
otn

総合スコア85647

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

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

marooon99

2024/09/06 19:09

ご丁寧に参考URLなども載せていただき、誠にありがとうございます。 https://zenn.dev/sunwood_ai_labs/articles/control-existing-chrome-with-selenium こちらの方が載せているコードをそのまま使うと、Chromeをデバッグで起動させて任意の指定したURLに飛ぶまでに、pythonの実行を開始してから4秒かかってしまいます。(こんなに遅いのは私のパソコンの問題かもしれません) そこで、あらかじめget(URL)しておいて、そのまま待機、21:00になったらrefresh()をするようにしたいと思います。seleniumで時間指定するプログラムを検索してもなかなか見つかず、、、例えば、https://kacchanblog.com/programming/python-selenium-bot こちらの方のページの中で、「schedule」を使用して、メイン処理の時間指定をしているものが出てきました。import schedule schedule.every().day.at("21:59:30").driver.do(job)でjobをdriver.refresh()と定義して実行してみましたが、エラーが出てしまいました。こんな単純なものではないのでしょうね、、。 コード上で"21:00"と指定すれば実行してくれるようなものはなく、やはり時間を逆算して、コードを作成する必要があるのでしょうか?datetimeなど検索して勉強してみましたが、あまり自分には理解できなかったです。。。 そもそも、1番始めのpythonの実行ボタンを押してから、Chromeをデバッグで起動させるのに、4秒もかかるのがおかしいのでしょうか、、それが1秒とかに縮むだけでも嬉しいのですが、、。長くなり、大変申し訳ございません。
otn

2024/09/07 11:59 編集

プログラムを起動してから、ブラウザが起動して最初にgetページが出るまで4秒というのはおかしくは無いと思います。今やってみましたが、3-4秒くらいかかりました。プログラムで正確に測ったわけではないですが。 SSDかHDDかも多少影響するかも知れません。 > seleniumで時間指定するプログラムを検索してもなかなか見つかず、 そういうアプローチだと、専用の「schedule」を使うのでしょうが、理解するまでに時間が掛かると思います。 実際やってみてエラーになられたようですね。あと、1秒未満の精度を求めても良いのか調べた方が良いかと思います。 私が書いたのは、 > 待ち方はいろいろ考えられますが、現在時刻と希望時刻の差を秒単位で求めて、time.sleep(秒)するのが明快かと思います。 と書いたとおりで、「残り時間を求めて待つ」というのは単純明快です。 > datetimeなど検索して勉強してみましたが サンプルを回答に追記しておきます。 ※お詫び:朝出かける前にコメントを書き始めたのですが、コードまで書いていると家を出る時間に間に合わないので、続きは帰ってから書こうと思って放置したつもりなのですが、うっかり投稿ボタンを押してしまっていたようで、半日以上、書きかけが投稿された状態でした。失礼しました。
marooon99

2024/09/08 13:01

お忙しいところ、ご丁寧にありがとうございました!!引き続き、試行錯誤して、理想のプログラムに近づけられるよう頑張ります。
marooon99

2024/09/11 11:21

その後、いろいろ試したところ、希望通りのプログラムが作成できました。ご丁寧に、誠にありがとうございました。 ベストアンサーに選ばせていただきました。 またご縁がございましたら、何卒よろしくお願いいたします。
guest

0

可能です。
ていうか、Chromeを開いて任意のURLに飛ぶまで4秒って、時間かかりすぎです。

4秒がプログラム的な影響(sleepなど)なら安直に考えてそこを時間指定にすれば良いのでは無いでしょうか

というかここはchatGPTではなく人間が答えてますので、検索したり合理的に考えたりしてみるのがベストな手段に思います
(質問の背景が分からないですが一見して人に聞かざるを得ない内容には見えないため、補足して置いた方が優しい回答が付きやすいよう思います)

不躾ながらよろしくお願いします

投稿2024/09/06 15:14

utm.

総合スコア220

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

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

utm.

2024/09/06 16:55

ていうか、任意のページに飛びたいと言うだけならjsだけでもできますよ? 時間の管理が大変ならWindowsタスクスケジューラで起動するファイルをセットしておけばいいし。 こっちの方が学習コストが低い気がする。
utm.

2024/09/06 16:58

もうひとつ言いたいこと忘れてました。 サーバー時間を知る術がない限り、ローカルの時間とWebページの時間がイコールか分からないので、ミリ秒の誤差なくする場合は他の方法を考えなければなりません 個人的には不可能に思います
marooon99

2024/09/06 19:13

ご回答ありがとうございます。任意のページに飛んだあと、そのまま要素のクリックや入力をしたいため、seleniumを使っております。もう少し、自分で勉強したいと思います。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.39%

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

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

質問する

関連した質問