selenium中webdriver.Chrome()的返回对象的session值详解

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()

运行结果:

selenium中webdriver.Chrome()的返回对象的session值详解_第1张图片

程序的功能非常简单,1:打开一个谷歌浏览器 2:跳转到百度页面 3:等待两秒退出。 可是具体每一步程序都干了什么? 尤其是每个函数的返回值是什么,driver中的session值怎么来的并不清楚。

下面我们就详细的讲一下是怎么实现的。

driver = webdriver.Chrome() ,这个函数调用中的webdriver就是from selenium import webdriver中导入的模块。如下:

selenium中webdriver.Chrome()的返回对象的session值详解_第2张图片

进入webdriver模块,如下图,可以看到,在这里的.chrome.webdriver中导入了WebDriver然后取别名Chrome,看到这里我们就大概明白了,webdriver.Chrome()并不是一个函数,实际上是调用谷歌浏览器对应的.chrome.webdriver中WebDriver这个类的实例化,具体表现为Chrome()。

selenium中webdriver.Chrome()的返回对象的session值详解_第3张图片

看到这一步,我们已经清楚了这个函数是怎么调用的。但是依旧不清楚函数的返回参数session值是怎么来的。

 

我们再进入.chrome.webdriver我们可以看到WebDriver这个类具体的实现方法,这个类继承了RemoteWebDriver

selenium中webdriver.Chrome()的返回对象的session值详解_第4张图片

我们先进入父类RemoteWebDriver可以看到self.session_id = None。

selenium中webdriver.Chrome()的返回对象的session值详解_第5张图片

接着点开self.start_session(capabilities, browser_profile)函数,可以看到是由这个函数中得到的。

selenium中webdriver.Chrome()的返回对象的session值详解_第6张图片

到这里我们终于就看到了session值得由来。

 

但是我还有几点不明白,为什么print(driver)的时候只打印了driver的session_id,其他的元素没有打印?这些元素如何区分,哪些是有用的可以直接取到的?哪些是经常用到的?

selenium中webdriver.Chrome()的返回对象的session值详解_第7张图片

    我们可以单步进入print(driver),发现其实是调用了基类class WebDriver(object):中的函数 __repr__() 方法,这个方法的功能就是对你想要打印的内容进行设置 类似__str__()。我们可以看到这个基类中的__repr__()方法设置的返回值就是self.session_id,所以在众多的成员变量中,只打印了session_id。如果有需要,其他的成员变量可以通过print(drive.xxx)的形式打印出来。

selenium中webdriver.Chrome()的返回对象的session值详解_第8张图片

 

 

 

你可能感兴趣的:(python)