链接: http://pan.baidu.com/s/1hrtgFAk   密码: 8zhd

 if env.threadlocal.TESTING_BROWSER.upper() == 'FIREFOX':
        fp = FirefoxProfile()
        fp.native_events_enabled = False
        
        if env.FIREFOX_BINARY == '':
            try:
                env.THREAD_LOCK.acquire()
                browser = webdriver.Firefox(firefox_profile=fp)
            except:
                if isinstance(env.RESERVED_FIREFOX_BINARY, str) and env.RESERVED_ FIREFOX_BINARY != "":
                    browser = webdriver.Firefox(firefox_profile=fp, 
                                                firefox_binary=FirefoxBinary(firefox_path=env.RESERVED_FIREFOX_BINARY))
                else:
                    try:
                        log.step_warning("try to start firefox again!")
                        time.sleep(20)
                        browser = webdriver.Firefox(firefox_profile=fp)
                    except:
                        log.handle_error()
                        return False
            finally:
                env.THREAD_LOCK.release()
                
        else:
            browser = webdriver.Firefox(firefox_profile=fp, 
                                            firefox_binary=FirefoxBinary(firefox_path=env.FIREFOX_BINARY))

这里主要涉及到了python对于Firefox的操作。

首先是FirefoxProfile()这个软件包里面,定义的是如何去选取firefox的profile文件。包含了一些插件跟拓展。如果没有的话。Firefox是默认自己组织一个临时的profile然后去运行Firefox

接着是FirefoxBniary()这个软件包。这个接收一个path的参数。定义的是firefox.exe的路径。

b=FirefoxProfile("D:\Soft\Firefox\Profiles\V6")
#这里用的是41版本的火狐浏览器
c=FirefoxBinary(firefox_path="D:\\Soft\\Firefox\\Firefox\\firefox.exe")
a=webdriver.Firefox(firefox_profile=b,firefox_binary=c)

在我的机器上有一个安装版的firefox。一个绿色版的firefox,版本分别为43 和41.当我设置了FirefoxBinary()以后。调用的是41版本的Firefox。

接着。我们可以启动以下代码。看一下selenium关于python的代码:

python -m pydoc -p 1234    #在浏览器输入localhost:1234

可以分别看到这两个里面还有一些方法:

FirefoxProfile:add_extension(self,extension="xxx.xpi")  √

                         set_preference(self,key,value)   不会用

                         set_proxy(self,proxy)                  不会用

                         update_preference(self)             不会用

FirefoxBinary:kill(self)

                         launch_browser(self,profile)

                         which(self,filename)   通过搜索所给的filename,返回一个完整的合格的path

当然,以上那些方法就用了add_extension(),其他的都还不会用,也没用到。


接下去看到的是关于IE和Chrome的调用。需要用到驱动。

elif env.threadlocal.TESTING_BROWSER.upper() == 'CHROME':
        if env.DRIVER_OF_CHROME == '':
            print ('DRIVER_OF_CHROME is empty.')
            return False
        
        os.environ['webdriver.chrome.driver'] = env.DRIVER_OF_CHROME
        browser = webdriver.Chrome(executable_path=env.DRIVER_OF_CHROME)
    
    
    elif env.threadlocal.TESTING_BROWSER.upper() == 'IE':
        if env.DRIVER_OF_IE == '':
            print ('DRIVER_OF_IE is empty.')
            return False
        #杀死进程
        os.popen('TASKKILL /F /IM IEDriverServer.exe')
        
        dc = DesiredCapabilities.INTERNETEXPLORER.copy()
        
        dc['nativeEvents'] = False
        dc['acceptSslCerts'] = True
        
        os.environ['webdriver.ie.driver'] = env.DRIVER_OF_IE
        
        browser = webdriver.Ie(executable_path=env.DRIVER_OF_IE, 
                                   capabilities=dc)

这里面有有一个python中的os模块。使用

dir(os)
help(os.environ)

environ是一个字符串所对应环境的映像对象.通常用于跨平台.

os.environ["webdriver.chromedriver.exe"] #相当于把这个参数加入到了环境变量中。这样就 相当于一个全局的变量了

接下去是关于如何启动chrome浏览器:

import os
os.environ["webdriver.chromedriver.exe"]="D:\\chromedriver.exe"
browser=webdriver.Chrome(executable_path="D:\\chromedriver.exe")

os.popen(" ")可以返回内容,例如:

t=os.popen("ping 198.123.1.1")
print t.read()

这里IE会去杀死进程,为什么chrome不去杀死chromedriver的进程?难道是IE的特殊性?

启动IE:

os.environ['webdriver.IEdriver']="D:\\IEDriverServer"
b=webdriver.Ie(executable_path="D:\\IEDriverServer")