今天在群里面给一哥们解决了一问题,自己也对selenium的其中结构更加深入了解了下:
问题描述:
from selenium import webdriver
webdriver.firefox() 可以调用成功,但是通过webdriver.ie()调用报错, not callable.
问题解答:
通过查看selenium的机构,selenium包下面有个包叫webdriver, 然后包内有各种浏览器的包,以及一些常用文件包等等。
左右两张图分别为webdriver的包结构和ie包结构。
而我使用ie的时候一般都是from selenium.webdriver.firefox import webdriver,然后通过调用webdriver.Webdriver()来对ie初始化。
对于上述群里哥们提出的问题,我以为那个只是简单的调用包出了问题,当然包是无法调用的,但是他的webdriver.firefox()竟然能够运行,特别让我诧异,自己试了试,果然能够成功,顿时觉得对python的理解有问题了,于是调试进入到webdriver内部查看webdriver包下到底还有啥东西能够是包初始化,到watch窗口发现包内竟然有firefox是class类型的,我了个去,不是吧,很是不理解????
继续往下看,发现竟然还有个firefox模块?这个才是我预想中的呢,可是可是怎么会有firefox 类呢,由于以前知道这些包类的__init__()可能捣鬼,所以查看了下webdriver下的这个文件,有惊喜,见下图:
哇,原来在这里就导入了类了,但是亮点是,它导入之后用的别名和同级的包名都不一样哦,比如firefox 和Firefox, ie和Ie.
回头看看自己刚才调试用的,果真用的是Firefox. 汗!!!
原来selenium考虑的还蛮周全,让人在import的时候不用那么长的路径就能直接调用内部的不同的类,嗯,懒人专用。当然,在内部使用的时候,因为所有的浏览器包下面的模块名都是webdriver,所以在import的时候,必须import到上一层目录,然后在调用的时候通过像ie.wendriver.Webdrver()等来调用。