selenium python phantomjs driver时,不能new tab

发表于:
来源:阿酷技术学习
作者:simple

如果用Firefox或者chrome时,可以打开一个新窗口:

driver.find_element_by_tag_name('body').send_keys(Keys.COMMAND + 't') 

这样是可以打开一个窗口的。

但时用phantomjs是不能这样打开的。

因为,phantomjs是一个无界面浏览器(a headless browser),没有真实的窗口被渲染,也没有通过键盘快捷键的操作。

实际上它是这样,每次一个新的窗口(tab/window)被打开,他是增加一个driver's window handles,每个driver window handle有一个独一无二的id标识。

然后,你可以切换在这ID之间切换。

那么如何打开新的tab呢?

execute_script。如下例。

driver = webdriver.PhantomJS(desired_capabilities=dcap,service_args=service_args)
#--------
print 'len is:%s'%len(driver.window_handles)#此时就有1个tab了。
driver.execute_script("window.open('https://www.arkuu.com', 'new window')")
print 'len is:%s'%len(driver.window_handles)#此时2个。
driver.switch_to.window(driver.window_handles[-1])#切换到最新打开的tab
time.sleep(5)
print driver.window_handles[-1]
print driver.current_url
print driver.title
driver.close()#把当前的tab关闭。只有超过2个tab时,才可以关闭不然下面driver不能用了。
print 'len is...:%s'%len(driver.window_handles)#1个
driver.switch_to.window(driver.window_handles[0])
driver.execute_script("window.open('https://www.baidu.com', 'new window')")
driver.switch_to.window(driver.window_handles[-1])
time.sleep(5)
print 'len is:%s'%len(driver.window_handles)#2个
print driver.window_handles[-1]
print driver.current_url
print driver.title
driver.quit()#关闭所有tab