[selenium][02] – 打开新的页面N种方法

文章目录

导读

  • 日期:2022-1-21

今天遇到一个问题,控制chrome的时候,想在新的页面处理临时任务,处理临时任务结束后再返回前一个页面处理问题。

这就涉及到如下两个问题:

  • 打开新的Chrome标签
  • 控制多个标签(由于篇幅问题,这里不讨论)

解决问题思路

  • 查看官方文档,然而翻了整个selenium文档,没有想要的方案。
  • 查源码,找到switch_to.new_window
  • baidu、google……

测试类代码(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:**文章中内容仅用于技术交流,请勿用于违规违法行为。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注