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

文章目录

  • 导读
  • 解决问题思路
  • 测试类代码(driver正常退出)
  • 方案一:driver.switch_to.new_window(部分系统失败)
  • 方案二:Actions(失败)
  • 方案三: Ctrl+T(失败)
  • 方案四: driver.execute_script(**成功**)
  • 参考资料
  • 导读

  • 日期: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])之后才再操作新页面。

    参考资料

  • selenium官网 https://www.selenium.dev/documentation/
  • github https://github.com/SeleniumHQ/selenium
  • selenium + python 中文文档 https://python-selenium-zh.readthedocs.io/zh_CN/latest/
  • Open web in new tab Selenium + Python https://stackoverflow.com/questions/28431765/open-web-in-new-tab-selenium-python
  • selenium多窗口切换,及其关闭 https://www.cnblogs.com/zhenyu1/p/14698880.html
  • qq群:夜猫逐梦技术交流裙/953949723
    逐梦中原技术交流QQ群
  • **ps:**文章中内容仅用于技术交流,请勿用于违规违法行为。

    来源:夜猫逐梦

    物联沃分享整理
    物联沃-IOTWORD物联网 » [selenium][02] – 打开新的页面N种方法

    发表评论