• selenium之选项卡管理


    在使用selenium管理浏览器的时候遇到一些小问题,现将这些小问题作一下总结:

      

    (1)browser是什么?

    from selenium import webdriver
    
    browser = webdriver.Chrome()
    print(browser)    # <selenium.webdriver.chrome.webdriver.WebDriver (session="7fa6e41c5d16188b2c9054a97b376ffd")>

    这个browser就是一个类的实例。是什么类的实例(其实就是selenium.webdriver.chrome.webdriver.WebDriver这个路径下类的实例),可以通过selenium包进行一步一步查看。

    (2)在浏览器中再打开一个窗口

     1 from selenium import webdriver
     2 
     3 browser = webdriver.Chrome()
     4 browser.get("https://www.baidu.com")
     5 print(browser.current_window_handle)    # CDwindow-876A3769096F9B14756B8065F9D09700
     6 browser.execute_script("window.open()")
     7 print(browser.current_window_handle)    # CDwindow-876A3769096F9B14756B8065F9D09700
     8 print(browser.window_handles)   # ['CDwindow-876A3769096F9B14756B8065F9D09700', 'CDwindow-58192B86EEE5C841A366BA665975F03D']
     9 browser.switch_to.window(browser.window_handles[1])
    10 print(browser.current_window_handle)    #  CDwindow-58192B86EEE5C841A366BA665975F03D
    11 
    12 browser.switch_to.window(browser.window_handles[0])
    13 browser.close()
    14 # print(browser.current_window_handle)    # selenium.common.exceptions.NoSuchWindowException: Message: no such window: target window already closed
    15 # browser.execute_script("window.open()")    # selenium.common.exceptions.NoSuchWindowException: Message: no such window: target window already closed
    16 browser.switch_to.window(browser.window_handles[0])
    17 browser.execute_script("window.open()")

    通过执行javascript的window.open()命令,可以打开一个新的窗口。

    通过第5行和第7行执行结果可知:打开新窗口时,当前窗口句柄不会自动切换到新的窗口句柄。但是浏览器显示的当前选项卡却是新窗口!!!,如果想将当前句柄的选项卡置于最前面,执行browser.switch_to.window()再切一下就OK了。

    通过第8行可知:所有的窗口句柄都保存在window_handles这个列表里面。

    通过第9行命令可以切换窗口,括号里面的browser.window_handles[1]其实就是取列表中的第2个值,这个值和窗口唯一对应。

    通过第13行关闭当前选项卡,这时执行第14行,报错!说明关闭当前选项卡之后,浏览器不会自动切换到其它存在的窗口。

    注释第14行,打开第15行并执行,报错!说明只有浏览器对象存在当前选项卡的时候,才能够执行新建窗口操作。

    通过第16行代码,将当前选项卡切换到0,为什么是0?因为列表中之前的索引0被删了,所以之前的1变成了0。此时执行新建窗口操作,可以正常创建。

    (3)创建新选项卡的时候直接打开指定网址

    from selenium import webdriver
    
    browser = webdriver.Chrome()
    browser.get("https://www.baidu.com")
    browser.execute_script('window.open("https://www.taobao.com")')    # 括号内的网址一样要加引号,不然会报错!
  • 相关阅读:
    抽象工厂模式
    python 工厂方法
    采用__call__ 实现装饰器模式
    策略模式
    采集15个代理IP网站,打造免费代理IP池
    grid网格布局——色子布局
    观察者模式
    搭建免费代理池---采集代理(1)
    python 爬虫 user-agent 生成
    多进程 + 多线程抓取博客园信息
  • 原文地址:https://www.cnblogs.com/sq5288/p/9512608.html
Copyright © 2020-2023  润新知