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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

selenium

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

Q&A

解決済

1回答

6560閲覧

pythonでimportすると「ImportError: cannot import name 'webdriver'」になる。

ustst

総合スコア31

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

selenium

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

0グッド

0クリップ

投稿2018/08/04 17:36

実行するとエラーになります。

「ImportError: cannot import name 'webdriver'」
どうしたらいいでしょうか?

script

test_ut.py (unittest実行用)

python

1import unittest 2import selenium.webtest1 3 4def suite(): 5 suite = unittest.TestSuite() 6 suite.addTest(selenium.webtest1('TestCase1')) 7 return suite 8 9 10if __name__ == '__main__': 11 runner = unittest.TextTestRunner() 12 test_suite = suite() 13 runner.run(test_suite)

selenium/webtest1.py (selenium実行ファイル)

python

1# -*- coding: utf-8 -*- 2from selenium import webdriver 3from selenium.webdriver.common.by import By 4from selenium.webdriver.common.keys import Keys 5from selenium.webdriver.support.ui import Select 6from selenium.common.exceptions import NoSuchElementException 7from selenium.common.exceptions import NoAlertPresentException 8import unittest, time, re, datetime, os 9 10class TestCase1(unittest.TestCase): 11 def setUp(self): 12 self.driver = webdriver.Firefox() 13 self.driver.implicitly_wait(30) 14 self.base_url = "https://yahoo.co.jp/" 15 self.verificationErrors = [] 16 self.accept_next_alert = True 17 18 def test_untitled_test_case(self): 19 driver = self.driver 20 driver.get("https://yahoo.co.jp") 21 print(driver.title) 22 23 def tearDown(self): 24 self.driver.quit() 25 self.assertEqual([], self.verificationErrors) 26 27if __name__ == "__main__": 28 unittest.main()

単体での実行結果

python

1# python36 selenium/webtest1.py 2Yahoo! JAPAN 3. 4---------------------------------------------------------------------- 5Ran 1 test in 2.544s 6 7OK

それをimportしたunittest側の実行結果

# python36 test_ut.py Traceback (most recent call last): File "test_ut.py", line 2, in <module> import selenium.webtest1 File "/ababa/selenium/webtest1.py", line 2, in <module> from selenium import webdriver ImportError: cannot import name 'webdriver'

moduleとして実行しても変わらず

# python36 -m test_ut Traceback (most recent call last): File "/usr/lib64/python3.6/runpy.py", line 193, in _run_module_as_main "__main__", mod_spec) File "/usr/lib64/python3.6/runpy.py", line 85, in _run_code exec(code, run_globals) File "/ababa/test_ut.py", line 2, in <module> import selenium.webtest1 File "/ababa/selenium/webtest1.py", line 2, in <module> from selenium import webdriver ImportError: cannot import name 'webdriver'

環境

python 3.6
centos7

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

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

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

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

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

guest

回答1

0

ベストアンサー

ImportError: cannot import name 'webdriver'

グーグル翻訳
ImportError:名前 'webdriver'をインポートできません

File "/XXXX/selenium/webtest1.py", line 2, in <module>

ディレクトリ名がseleniumモジュールとかぶっています。別の名前に変更してくださいな。


◇補足説明

File "/XXXX/test_ut.py", line 2, in <module>
import selenium.webtest1
File "/XXXX/selenium/webtest1.py", line 2, in <module>
from selenium import webdriver

例外スタックトレースによるとプログラム階層が以下になります。

Python

1XXXX 2 +- test_ut.py 3 +- selenium 4 +- webtest1.py 5 +- __init__.py # ←質問文に記載がないのですが、このファイルがあるのでは?。

python36 selenium/webtest1.py
python36 test_ut.py

この2つのコマンドの動作の違いは、6.1.2. モジュール検索パスの以下の部分です。

入力されたスクリプトのあるディレクトリ (あるいはファイルが指定されなかったときはカレントディレクトリ)。

~中略
スクリプトファイルを含むディレクトリが検索パスの先頭、標準ライブラリパスよりも前に追加されます。なので、ライブラリのディレクトリにあるファイルよりも、そのディレクトリにある同じ名前のスクリプトが優先してインポートされます。

seleniumフォルダにある__init__.pyファイルによりseleniumフォルダが6.4. パッケージ化されて
モジュールの解決に影響を与えました。

IDE(Pycharm community edition)などを使用すると、こういうトラブルは防げるかと。

投稿2018/08/04 17:55

編集2018/08/05 12:33
umyu

総合スコア5846

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

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

ustst

2018/08/05 16:27

ありがとうございます! 元々は別のエラーが出ていて検証していたんですが、 ここでの質問用に整理して専用ディレクトリとスクリプトを作ってたら こんな感じになっちゃいました。 ひとまず今のエラーについては解決できそうで何よりです。 ディレクトリ名についてなんて考えたことなかった。 ちょっと急な仕事でまだ検証できていないのですが、取り急ぎレスさせて頂きます。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.45%

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

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

質問する

関連した質問