[selenium][02] – 打开新的页面N种方法
文章目录
导读
日期:2022-1-21
今天遇到一个问题,控制chrome的时候,想在新的页面处理临时任务,处理临时任务结束后再返回前一个页面处理问题。
这就涉及到如下两个问题:
打开新的Chrome标签
解决问题思路
switch_to.new_window
测试类代码(driver正常退出)
这里特别注意一点就是,关闭driver的时候,需要枚举所有的窗口self.driver.window_handles
,然后全部关闭,最后再执行quit。
否则会出现chrome未正常退出的情况。这是之前遇到的一个问题,记录一下。
class Main(object):
def __init__(self):
from selenium import webdriver
self.driver = webdriver.Chrome()
self.driver.get("http://www.baidu.com")
def __del__(self):
print('=== ' + '__del__')
if self.driver:
handles = self.driver.window_handles # 获取所有的 handles
for i in reversed(range(len(handles))):
self.driver.switch_to.window(handles[i])
self.driver.close()
time.sleep(1)
self.driver.quit()
方案一:driver.switch_to.new_window(部分系统失败)
self.driver.switch_to.new_window('tab')
没错,就这么一行代码搞定,在win7电脑上试了一下,完全正常。
然而换了台电脑win10无法正常打开新页面,暂时放弃。
方案二:Actions(失败)
body = self.driver.find_element_by_tag_name('body')
ActionChains(self.driver)\
.key_down(Keys.CONTROL)\
.send_keys('t')\
.key_up(Keys.CONTROL).perform()
time.sleep(1)
网上找了很多资料都是这个方案,各种尝试,都是失败的。可能Mac上可以,待测试
。
方案三: Ctrl+T(失败)
self.driver.find_element(By.TAG_NAME, 'body').send_keys(Keys.COMMAND + "t")
这个方案是基于真人操作,输入Ctrl+T能打开新的标签页。不过方案二都失败了,这个也跟预期一样的失败了。。。可能Mac上可以,待测试
。
方案四: driver.execute_script(成功)
self.driver.execute_script("window.open('','_blank');")
这个方案也是各种资料里面找到的,其实就是通过运行JavaScript
进行打开Tab页面的操作。
这里需要说的是,方案一,打开页面后直接跳转到新的页面,driver可以直接对新的页面进行操作。
而方案四需要执行self.driver.switch_to.window(window_handles[1])
之后才再操作新页面。
参考资料

**ps:**文章中内容仅用于技术交流,请勿用于违规违法行为。
来源:夜猫逐梦