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

  • 29
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜猫逐梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值