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

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

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

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

Q&A

解決済

1回答

1127閲覧

pythonでのモジュールの作成時のドライバの使い方で

Yuiti628

総合スコア71

Python

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

0グッド

1クリップ

投稿2020/10/08 01:28

現在初めて本格的にシステムを作成しています。
他の言語でも同じことかもしれませんが、今回はpythonでのマナー、設計的な質問になります。

実行したいプログラム

あるサイトにログインし、自動操作するプログラム

困っていること

設計?で、ドライバオブジェクトの書き方が気に食わなくて困っています。

現在は、mainファイルとブラウザ操作のファイルで分けており、ブラウザで操作する内容は複数あります。
下記のようなコードです。

main から ブラウザ操作のファイルの操作Aを呼び出したとします。
まず、ドライバを取得して、その後 ログイン→操作Aを行います。
このようなコードですと、ドライバを取得後に全ての操作の引数にドライバを渡さなくてはブラウザを操作できないことになってしまいます。
login(driver) , auto_operation_A(driver) など

ここで、どうすれば、引数のdriverを無くせるか教えて頂きたいです。

python

1#main 2 3import browser_operation as bo 4 5# ブラウザ操作 6result = bo.main_auto_operation_A() 7 8# DBに登録 9 10# ユーザーに通知

python

1from selenium import webdriver 2 3# Aの操作 4def main_auto_operation_A(): 5 result =[] 6 # ドライバの取得 7 driver = Start_up_browser() 8 # ログイン 9   login(driver) 10 # 自動操作 A 11 result = auto_operation_A(driver) 12 return result 13 14# Bの操作 15def main_auto_operation_B(): 16 result =[] 17 # ドライバの取得 18 driver = Start_up_browser() 19 # ログイン 20   login(driver) 21 # 自動操作 B 22 result = auto_operation_B(driver) 23 return result 24 25 26# ドライバの取得 27def Start_up_browser(): 28 29 # ドライバーパス 30 driver_path = 'ドライバーパス' 31 driver = webdriver.Chrome(driver_path) 32 return driver 33

考えた案

###### 1 ブラサウザファイルの全てをクラスにする。
__init__でドライバを取得しておけば、self.driverで解決できる。
これってclassにする必要があるのかな〜と分からなくなってます。

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

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

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

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

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

guest

回答1

0

ベストアンサー

関数を使用して定義した場合その関数の実行が終えてしまうと関数内で定義されたローカル変数は破棄されます。
通常はreturnで変数を戻り値にしてあげる事で、関数の実行元でローカル変数を変数として保持する事ができます。

login()関数内ではdriver変数を保持していない為期待の動作を実行する事が出来ません。
その為実行時に引数としてdriver変数を与え、関数内でそれを受け取り実行する必要があったとおもいます。
しかし今回この引数を与えるのが煩わしいという事であれば
driverをグローバル変数として定義してしまえば、都度引数を与えずとも実行が可能になると思います。
グローバル変数として定義してしまう事に不都合が有るという場合には、引数を与える必要があります。

python

1driver = webdriver.Chrome() 2# Aの操作 3def main_auto_operation_A(): 4 result =[] 5 # ログイン 6 login() 7 # 自動操作 A 8 result = auto_operation_A() 9 return result 10 11def login(): 12 driver.get('example') 13 14def auto_operation_A(): 15 tmp = driver.get('hoge') 16 return tmp

投稿2020/10/08 04:39

編集2020/10/08 04:47
nto

総合スコア1438

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問