zoukankan      html  css  js  c++  java
  • Python之selenium创建多个标签页

    最近在做一个项目,需要用到cookies登录,想法是,在同一个浏览器下,打开两个标签页进行。让其自动获取cookies,先记录,不行的话,到时候再手动加载cookies。

     1 '''
     2     #selenium加载新标签页
     3 '''
     4 #导入所需库
     5 from selenium import webdriver
     6 from selenium.webdriver.common.keys import Keys
     7 import time
     8 
     9 #初始化浏览器的一些参数
    10 options = webdriver.ChromeOptions() #实例化
    11 options.add_argument('--headless') #无头模式
    12 options.add_argument('--disable-gpu') #禁用gpu硬件加速
    13 options.add_argument('--window-size=1920, 1080') #初始化窗口大小,网上很多人说用maximize_window()最大化窗口,经测试,然并卵
    14 
    15 #定义两个链接,以便观察
    16 url1 = 'https://www.baidu.com' #用在浏览器标签页1
    17 url2 = 'https://www.sina.com.cn' #用在浏览器标签页2
    18 
    19 #初始化浏览器
    20 driver = webdriver.Chrome(options=options)
    21 #driver.maximize_window() #然并卵的最大化窗口函数
    22 
    23 #开始请求网页
    24 driver.get(url1)
    25 driver.implicitly_wait(5) #等待加载,用time.sleep()的话,我更建议用这个函数
    26 driver.save_screenshot('baidu.png') #截图查看是否符合预期
    27 #打印以便比较
    28 print(driver.window_handles)
    29 cookies = driver.get_cookies()
    30 print(cookies)
    31 
    32 #新增标签页
    33 newTab = 'window.open("https://www.sina.com.cn");' #就当成js语句吧
    34 driver.execute_script(newTab) #输出js语句
    35 #切换标签页
    36 #driver.switch_to_window(driver.window_handles[-1]) #切换到最后一个标签页,switch_to_window在3.7已经不推荐使用了(反正我的版本是3.7.9,姑且这么说)
    37 driver.switch_to.window(driver.window_handles[-1]) #切换到第二个标签页
    38 cookies2 = driver.get_cookies()
    39 print(cookies2)
    40 
    41 #截图
    42 driver.save_screenshot('sina.com.cn.png')
    43 #打印第二个标签页的值用来和第一个比较
    44 print(driver.window_handles)

    方法总是不止一种,再加一种:

     1 '''
     2     #selenium创建标签页方法2
     3 '''
     4 from selenium import webdriver
     5 from selenium.webdriver import ActionChains
     6 from selenium.webdriver.common.keys import Keys
     7 
     8 #初始化一些参数
     9 options = webdriver.ChromeOptions()
    10 options.add_argument('--headless')
    11 # options.add_argument('--disable-gpu')
    12 options.add_argument('--window-size=1920, 1080')
    13 
    14 #定义两个url
    15 url1 = 'https://www.baidu.com'
    16 url2 = 'https://www.sina.com.cn'
    17 
    18 #初始化浏览器
    19 driver = webdriver.Chrome()
    20 #请求第一个网页
    21 driver.get(url1)
    22 driver.implicitly_wait(5) #等待加载
    23 driver.save_screenshot('baidu.png') #保存截图
    24 baiduCookies = driver.get_cookies() #获取cookie
    25 print(baiduCookies) #打印cookie
    26 
    27 #实例化一个行为
    28 actions = ActionChains(driver)
    29 # 经测试下面的按键没用
    30 # #调用actions模拟按键,先按下键盘下的Control键,然后再发送t,然后再松开Control键,这样我们就发送了一个control+t的命令,即添加标签页
    31 # actions.key_down(Keys.CONTROL).send_keys('t').key_up(Keys.CONTROL).perform()
    32 # 调整思路,那就在原标签页按住Ctrl+链接也会打开新的标签页,一般浏览器都这样
    33 news = driver.find_element_by_link_text('新闻') #找到带链接的新闻标签
    34 actions.key_down(Keys.CONTROL).click(news).key_up(Keys.CONTROL).perform() #找到news并按住ctrl点击
    35 #切换到第二个标签页
    36 driver.switch_to.window(driver.window_handles[-1])
    37 #利用第二个标签页请求第二个url
    38 driver.get(url2)
    39 driver.save_screenshot('anotherTab.png') #保存截图
    40 anotherTabCookies = driver.get_cookies() #获取cookies
    41 print(anotherTabCookies) #打印cookies
    42 
    43 # driver.close() #是退出当前句柄的标签页
    44 # driver.quit() #退出浏览器

    看到网上有帖子说,打开第二个标签页很卡,也就是根本加载不出第二段代码的代码41行。不知道是我网速问题还是真的如网上的帖子所说,懒得等,直接开启硬件加速,问题解决。

  • 相关阅读:
    下一周计划
    strategy模式
    Roc加载模块过程
    博客园开通了
    MO sample中的缓冲冲区的例子很简单的一个例子
    作为一个想成为程序员的人来说
    试试用live writer写博客到博客园
    Tomcat崩溃,无法访问
    The class Form1 can be designed, but is not the first class in the file.
    Exception in thread "Timer0" java.lang.NullPointerException
  • 原文地址:https://www.cnblogs.com/mafu/p/14158337.html
Copyright © 2011-2022 走看看