2017-11-19 9 views
0

にセレンドライバを渡すために、私は自分のコードを実行するときに、このエラーを取得し続ける:Pythonはどのように機能

**name 'driver' is not defined** 

誰が、なぜ教えてもらえますか?どうすればこのように動かすことができますか?したがって、小さなテストのいずれかが失敗した場合、問題がどこにあるかは非常に明確です。

generateRandomBroswerInfo() 
loginSite() 
getSomeInfo() 
quitBroswer() 

私は私のコード

のPython 3.6にセレンを使用しています:あなたはgenrateBroswer内のローカルdriverを定義している

from selenium import webdriver 
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities 
from selenium.common.exceptions import TimeoutException 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 


def genrateBroswer(): 
    dcap = dict(DesiredCapabilities.PHANTOMJS) 
    dcap["phantomjs.page.settings.userAgent"] = ('Mozilla/5.0 (iPhone; CPU iPhone OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3') 
    driver = webdriver.PhantomJS(desired_capabilities=dcap) 
    driver.set_window_size(300, 600) 

def letssee(): 
    driver.get('http://www.whatsmyip.org/') 
    driver.save_screenshot('this.png') 


genrateBroswer() 
letssee() 
#ETC 

答えて

0

すべての必要な方法でクラスを使用できます(Classesを参照)。例:要するに

class Webdriver: 

    def __init__(self): 
     self.genrateBroswer() 
     self.letssee() 


    def genrateBroswer(self): 
     dcap = dict(DesiredCapabilities.PHANTOMJS) 
     dcap["phantomjs.page.settings.userAgent"] = ('Mozilla/5.0 (iPhone; CPU iPhone OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3') 
     self.driver = webdriver.PhantomJS(desired_capabilities=dcap) 
     self.driver.set_window_size(300, 600) 

    def letssee(self): 
     self.driver.get('http://www.whatsmyip.org/') 
     self.driver.save_screenshot('this.png') 


# Creating an instance of the webdriver 
myWebsite = Webdriver() 

myWebsite.driver 

は、あなたが機能渡って使用する必要があるすべては、あなたがキーワードselfでそれを格納することで、クラスのプロパティを作成する必要があり、あなたは内のすべての関数へselfを渡す必要がありますクラス。

+0

答えがマークされました。しかし、私の問題を解決した答えではなく、私の可変ドライバを変数グローブに変えました。 –

+0

@FutureHendrixsクラスから離れたければ、関数に 'driver'を渡し、更新された' driver'を返すことで、bgseのメソッドをお勧めします。 –

0

、あなたがその機能を離れると、それがなくなっています。あなたのletssee機能で

は、あなたがそれゆえ、あなたがエラーになっている、この時点では定義されていないdriverに、アクセスしようとしています

NameError: name 'driver' is not defined 

詳細については、およそPython variables and scope読み。

また、the Python tutorialをチェックしてください。

+0

'genrateBroswer'から' driver'を取り出して2番目の関数にロードできますか? &how –

+0

'genrateBroswer'関数の最後に' return driver'というreturn文を追加し、 'driver = genrateBroswer()'のように呼び出すことができます。 – bgse

+0

@FutureHendrixsこれは非常に基本的な質問の一種であるので、私はあなたが[Pythonチュートリアル](https://docs.python.org/3/tutorial/)を進めることをお勧めしたいと思います。嫌悪感はありません。あなたに頭痛や誓いを覚えさせてくれるでしょう:-) – bgse

関連する問題