1.代码功能打开谷歌浏览器,并输出返回的对象:
from selenium import webdriver
import time
# 创建Chrome驱动程序的新实例
driver = webdriver.Chrome()
print(type(driver))
print(driver)
# 转到百度主页
driver.get("https://www.baidu.com")
time.sleep(2)
driver.quit()
运行结果:
程序的功能非常简单,1:打开一个谷歌浏览器 2:跳转到百度页面 3:等待两秒退出。 可是具体每一步程序都干了什么? 尤其是每个函数的返回值是什么,driver中的session值怎么来的并不清楚。
下面我们就详细的讲一下是怎么实现的。
driver = webdriver.Chrome() ,这个函数调用中的webdriver就是from selenium import webdriver中导入的模块。如下:
进入webdriver模块,如下图,可以看到,在这里的.chrome.webdriver中导入了WebDriver然后取别名Chrome,看到这里我们就大概明白了,webdriver.Chrome()并不是一个函数,实际上是调用谷歌浏览器对应的.chrome.webdriver中WebDriver这个类的实例化,具体表现为Chrome()。
看到这一步,我们已经清楚了这个函数是怎么调用的。但是依旧不清楚函数的返回参数session值是怎么来的。
我们再进入.chrome.webdriver我们可以看到WebDriver这个类具体的实现方法,这个类继承了RemoteWebDriver
我们先进入父类RemoteWebDriver可以看到self.session_id = None。
接着点开self.start_session(capabilities, browser_profile)函数,可以看到是由这个函数中得到的。
到这里我们终于就看到了session值得由来。
但是我还有几点不明白,为什么print(driver)的时候只打印了driver的session_id,其他的元素没有打印?这些元素如何区分,哪些是有用的可以直接取到的?哪些是经常用到的?
我们可以单步进入print(driver),发现其实是调用了基类class WebDriver(object):中的函数 __repr__() 方法,这个方法的功能就是对你想要打印的内容进行设置 类似__str__()。我们可以看到这个基类中的__repr__()方法设置的返回值就是self.session_id,所以在众多的成员变量中,只打印了session_id。如果有需要,其他的成员变量可以通过print(drive.xxx)的形式打印出来。