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

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

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

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

Python

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

selenium

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

Q&A

解決済

4回答

2459閲覧

seleniumで、chromedriverが開いていない状態であればログイン処理、開いている状態であればログイン後のページに直接飛ぶという処理をしたい。

Rujuu

総合スコア1

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

Python

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

selenium

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

0グッド

0クリップ

投稿2020/11/12 09:58

前提・実現したいこと

・前提
プログラミング初心者
pythonでseleniumとchromedriverを使用して自動ログインするプログラムを組んでいます。

・実現したいこと
chromedriverが開いていない状態であればログイン処理、開いている状態(chromedriverのウインドウが開いている)であればログイン後のページに直接飛ぶという処理をしたいです。

・補足
実現したいことの大元は、プログラムを動かす際に毎回二段階認証を行うのをやめたいということです。
そのためにユーザープロファイルを使ってログイン状態を維持しようと考えています。

###教えていただきたいこと
・chromedriverのウインドウが開いているかを判断する方法

実現したいことを叶える、もっと効率的な方法などがありましたらそれも教えていただけると幸いです。

想定イメージ

python

1if ドライバーが開いている=false: 2 ログイン処理 3 4elif ドライバーが開いている=true: 5 driver.get(url) 6 7それ以降の処理

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

Python 3.8.3 64-bit(conda)
windows10

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

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

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

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

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

guest

回答4

0

Python

1import time 2from selenium import webdriver 3import chromedriver_binary 4from selenium.webdriver.common.desired_capabilities import DesiredCapabilities 5 6def main(): 7 user_profile = 'UserProfile' 8 options = webdriver.ChromeOptions() 9 options.add_argument('--user-data-dir=' + user_profile) 10 11 driver = webdriver.Chrome(options=options) 12 url = "https://teratail.local/wp-admin/edit.php" 13 driver.get(url) 14 15 time.sleep(5) 16 17 if "ログイン" in driver.title: 18 login(driver) 19 20 time.sleep(5) 21 driver.close() 22 23def login(driver): 24 username = "admin" 25 password = "password" 26 driver.find_element_by_css_selector("#user_login").send_keys(username) 27 driver.find_element_by_xpath("//*[@id='user_pass']").send_keys(password) 28 driver.find_element_by_css_selector("#rememberme").click() 29 driver.find_element_by_css_selector("#wp-submit").click() 30 31if __name__ == "__main__": 32 main()

ローカル環境(WordPress)で試しています。

1回目はログイン情報が保存されていないので管理ページを開こうとすると
ログインページに転送されます。
転送されたことを確認(ページタイトルがログイン)して、
ユーザー名、パスワードを入力して submit します。

2回目は UserProfile に認証情報が保存されているので、
ログインページに転送されることなく管理ページが開きます。

目的とは外れているかもしれませんが、今ひとつ問題点が把握できないので参考までにお知らせします。

投稿2020/11/14 09:30

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

私もそれほど詳しいわけではないので外れていたらすみません。

Open multiple tabs in selenium using python

こちらを参考に、

Python

1url = 'https://www.yahoo.com' 2control_string = "window.open('{0}')".format(url) 3driver.execute_script(control_string)

とすれば別のタブでページを開くことができました。

タブの移動は、
How to Switch Tabs in Selenium For Python

Python

1windows = driver.window_handles 2for w in windows: 3 driver.switch_to.window(w)

これで確認しました。次の記事も参考になるかもしれません。

(参考)Seleniumで新規タブを開く

投稿2020/11/13 11:56

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

Python+Selenium+ChromeDriverでログオン認証状態を維持する方法
こちらの記事は参考になりますでしょうか。

投稿2020/11/13 02:24

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Rujuu

2020/11/13 05:33

回答ありがとうございます! 教えていただいた記事を見たのですが、記事に書いてある「まず、スクリプトを実行すると最初は認証が必要なため、ログオン画面が開きます。手動でログオン情報を入力してみてください。」というのも自動化したいのです。 1つのプログラムファイルで組みたいので、初回起動時はログイン処理、2回目以降はログイン処理を行わないというようなプログラムにしたいと考えています。 ログイン情報を入力するタグ(?)がなかったらログイン処理を行わないというプログラムはかけそうですが、初回起動時にchromedriverを起動する処理が必要となるので、chromedriverのウインドウが複数出てきてしまいます。 なにか良い方法はありますでしょうか、、。
退会済みユーザー

退会済みユーザー

2020/11/13 07:08

ソースコードで確認しないと行き違いがあるかもしれませんが、理解している範囲で。 上の記事でUserProfileの保存ができると思うので、 そのまま目的のページを driver.get(url) してみて、 その結果ログインページが表示されれば (タイトルがログインとか、現在のURLがログインを確認) ログインスクリプトを実行でいかがでしょうか。 初回はログインページに転送されるのでログインスクリプトを実行。 2回目以降はUserProfileにより目的のURLが開くと思います。
Rujuu

2020/11/13 09:43

公開できる範囲のソースコードはこのような感じです。(公開できる範囲が狭くて申し訳ないです) """ from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.keys import Keys import re import time #url url1 = 楽天RMSのURL # ユーザプロファイルのフォルダ名(実行フォルダに作成されます) user_profile = 'UserProfile' #chromedriverのoption設定 options = webdriver.ChromeOptions() options.add_argument('--user-data-dir=' + user_profile) options.add_argument('--no-sandbox') options.add_argument('--disable-dev-shm-usage') driver = webdriver.Chrome(options=options) #要素のロード待ち時間 driver.implicitly_wait(10) driver.get(url1) """ 教えていただいたようにプログラムを組んでみたのですが、楽天RMSは一度ブラウザを閉じてしまうと再度ログインが必要なサイトのようで上手くいきませんでした。 ・試したこと 試しにブラウザを閉じずにプログラムを動かしたのですが、下記サイトの最後に書かれているように、プロファイルが既に使用されているためエラーが発生してしまいました。 https://rabbitfoot.xyz/selenium-chrome-profile/ ・改善案 ログイン後のブラウザを開いたまま、新規タブで目的のページのURLに飛ぶとログイン処理を飛ばすことができるので、「ブラウザが開いたままであれば新規タブでURLを開く」といった処理ができれば解決できるのではないかと考えています。 このような処理は可能なのでしょうか、、。
退会済みユーザー

退会済みユーザー

2020/11/13 11:44

> 一度ブラウザを閉じてしまうと再度ログインが必要 ブラウザを閉じる必要があるのでしょうか。 すみません。ちょっとこのあたりの状況がわかりません。
Rujuu

2020/11/14 07:55

申し訳ないです、、、状況が説明不足でした。 現在の作業が以下の流れで、 ①(プログラム実行↓ ・webdriverが開かれる ・ログイン処理 ・自動操作 プログラム終了) ②(別の作業) ③(プログラム実行↓ ・webdriverが開かれる ・ログイン処理 ・自動操作 プログラム終了) 実現したいことは、③のログイン処理を省略することです。 >ブラウザを閉じる必要があるのでしょうか。 プログラムを終了した後、再度同じユーザープロファイルでwebdriverを開くと 「Message: invalid argument: user data directory is already in use, please specify a unique value for --user-data-dir argument, or don't use --user-data-dir」 というエラーが出てきてしまうため、①で開いたブラウザ(ウインドウ)を閉じる必要があります。 Amazonなどであれば一度ブラウザを閉じたとしても、同じユーザープロファイルで開きなおせばログイン状態を維持できるとは思いますが、楽天RMSはウインドウを閉じると再度ログインが必要となるため行き詰っています。 下記サイトの方法も試したのですが、上記と同じエラーが出てしまいました。 URL:https://www.it-swarm-ja.tech/ja/selenium/selenium%E3%81%AF%E6%97%A2%E5%AD%98%E3%81%AE%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E3%83%BC%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%A8%E5%AF%BE%E8%A9%B1%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%81%8B%EF%BC%9F/941471844/
guest

0

自己解決

色々調べた結果RMSのシステム上難しそうだったので、一度プログラムを終了させるという方法をやめて、for文で自動操作の処理をすべて終わらせてから手で作業しなければならない工程を行うように変更しました。

投稿2020/12/08 07:44

編集2020/12/08 07:53
Rujuu

総合スコア1

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問