前言: 爬虫时偶尔需要切换多个页面,可以通过selenium实现自动切换浏览器页面,获取自己想要的数据。
思路分析
通过selenium框架实现自动切换浏览器页面时,首先需要区分每个页面的window_handle,也就是每个页面的浏览器窗口,确定浏览器页面窗口以后进行页面窗口的切换并将执行权利传递给切换后的页面窗口中,此时切换的窗口才会拥有执行权(当前窗口的控制权)。
参考代码
"""
@Time : 2021/2/13 15:54
@Auth : Yvon~早安阳光
@File :test09
"""
from selenium import webdriver # 导入浏览器驱动模块
import time # 导入时间模块
class Selenium(): # 创建selenium类
def __init__(self):
# 加载谷歌浏览器驱动
self.driver = webdriver.Chrome(
executable_path='D:/Python38/chromedriver')
self.driver.maximize_window() # 浏览器窗口最大化
self.driver.get('https://www.jianshu.com/u/cd9f63a63e4b') # 打开简书早安阳光页面
# 切换页面
def toggle_pages(self,url):
time.sleep(3) # 等待2秒
js = 'window.open("{url}")'.format(url=url) # 通过执行js,开启一个游戏App接口的窗口
self.driver.execute_script(js)
# 当前窗口的handle,也就是早安阳光窗口
jianshu_handle = self.driver.current_window_handle
# 获取所有窗口句柄集合(列表类型)
handles = self.driver.window_handles
# 获取游戏App接口窗口
new_handle = None
for handle in handles:
if handle != jianshu_handle:
new_handle = handle
time.sleep(3)
# 切换早安阳光窗口,并传递执行权力
self.driver.switch_to.window(jianshu_handle)
time.sleep(3)
self.driver.close() # 关闭早安阳光窗口
# 切换游戏App接口窗口,并传递执行权力
self.driver.switch_to.window(new_handle)
time.sleep(3)
self.driver.close() # 关闭游戏App接口窗口
if __name__ == '__main__':
selenium = Selenium() # 创建Selenium对象
selenium.toggle_pages('https://www.jianshu.com/nb/49125734') # 切换游戏App接口从零到实战页面
-
运行代码,首先谷歌浏览器将自动打开“早安阳光”网页,然后再打开“游戏App接口从零到实战”网页,再执行从“游戏App接口从零到实战”网页自动切换至“早安阳光”网页并关闭“早安阳光”网页的操作。如图所示
窗口切换.png
网友评论