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

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

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

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

selenium

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

Q&A

解決済

1回答

1017閲覧

seleniumのwebdriverの実行の仕方について教えてください!

ts12

総合スコア2

Python

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

selenium

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

0グッド

0クリップ

投稿2021/09/09 21:46

driver = webdriver.Chrome(options=options)

webdriverを起動するために、上記の記述が必要なのですが、これはChromeクラスからインスタンスを生成して、引数options=optionsを渡しているのでしょうか?
しかし、そうかと思って、Chromeクラスというものを探してみても見つかりませんでした。
print(webdriver.Chrome())で、場所を見てみたところ、<selenium.webdriver.chrome.webdriver.WebDriver >と表示されました。
どうやらWebDriverというクラスはあり、そこからインスタンスを生成し引数が渡されているようでした。
なぜ記述ではChromeクラスとなっているのに、実際はWebDriverクラスになっているのでしょうか?

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

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

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

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

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

guest

回答1

0

ベストアンサー

文自体を純粋に読むと
「「webdriverという名前を束縛しているオブジェクト」の属性Chrome」は呼び出し可能オブジェクトのはずだから、引数optionsに「optionsという名前を束縛しているオブジェクト」を指定して呼び出している
となります。


python

1from selenium import webdriver

インポートはこんな感じで行うと思いますが、これの意味は
(どこかに)seleniumというモジュールがあるはずだからまずそれをロードして。seleniumというモジュールにwebdriverというグローバル変数が定義されているはずだから、それを評価してでてくる値をここ(import文が書いてあるところ)でwebdriverという名前に束縛して
ということになります。
"selenium.webdriver"が指すオブジェクトを、グローバル変数driverが指すということです。

selenium.webdriverは実体はモジュールでありパッケージです。
その上でwebdriver.ChromeはなにかというとSeleniumのソースを見にいくことになります。
https://github.com/SeleniumHQ/selenium/blob/selenium-3.150.0/py/selenium/webdriver/init.py#L21

python

1from .chrome.webdriver import WebDriver as Chrome

と定義されているので、
selenium.webdriver.chrome.webdriverというモジュールがあるはずだからまずそれをロードして。selenium.webdriver.chrome.webdriverというモジュールにWebDriverというグローバル変数が定義されているはずだから、それを評価してでてくる値をここ(import文が書いてあるところ)でChromeという名前に束縛して
という意味です。
で、selenium.webdriver.chrome.webdriver.WebDriverはじっさいclass文で定義されたクラスです。 > ソース

このimport文が実行されると、selenium.webdriverモジュールのグローバル変数Chromeがselenium.webdriver.chrome.webdriver.WebDriverを指すことになります。


以上から、selenium.webdriver.Chrome で出てくる値は、実際はselenium.webdriver.chrome.webdriver.WebDriver というクラスになります。

「クラスの名前」と「クラスを指す名前」は必ずしも一致しないということを頭の片隅に置いておくのがいいと思います。

投稿2021/09/10 01:05

編集2021/09/10 01:12
quickquip

総合スコア11029

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

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

ts12

2021/09/10 01:27

分かりやすくありがとうございます!Seleniumのソースで定義されてたんですね。勉強になります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問