【Python_Selenium学习笔记(六)】基于Selenium模块实现切换句柄

基于Selenium模块实现切换句柄

前言

有些网站页面在点开链接后会出现新的窗口,但是浏览器对象 browser(driver) 还是之前页面的对象,针对此问题,需要切换到不同的窗口进行操作,Selenium 模块提供了 switch_to.window() 方法 切换句柄 和 window_handles 属性 获取句柄列表,下面详细介绍如何使用 Selenium 模块完成句柄的切换,并以实际案例进行展示。

正文

1、常用方法

  1. 获取当前窗口句柄:browser.current_window_handle
  2. 获取所有句柄:browser.window_handles
  3. 切换句柄:browser.switch_to.window()

2、使用流程

  1. 先创建浏览器对象:browser = webdriver.Chrome()
  2. 先获取当前所有句柄(列表):all_handles = browser.window_handles
  3. 再切换到指定句柄(利用列表下标索引取值):browser.switch_to.window(all_handles[1])

3、使用示例

3.1、梳理需求

在这里插入图片描述

使用 selenium 抓取民政部最新行政区划代码,由于点击链接后,会出现界面的跳转,所以需要通过 selenium 实现句柄的切换

3.2、程序源码

import time
from selenium import webdriver
from selenium.webdriver.common.by import By


class MZBSpider:
    def __init__(self):
        self.options = webdriver.ChromeOptions()  # 创建options功能对象
        self.options.add_argument('--headless')  # 设置无界面模式
        self.driver = webdriver.Chrome(options=self.options)  # 创建浏览器对象
        self.driver.get(url='https://www.mca.gov.cn/article/sj/xzqh/2020/')  # 输入网址

    def parse_html(self):
        """
        function:  html解析函数
              in:  None
             out:  None
          return:  None
          others:  HTML Parse Func
        """
        new_month_a = self.driver.find_element(By.XPATH,
                                               '//*[@id="list_content"]/div[2]/div/ul/table/tbody/tr[1]/td[2]/a')  # 找到最新月份的a节点
        time.sleep(1)  # 给页面的加载预留时间
        new_month_a.click()  # 点击
        li = self.driver.window_handles  # 出现两个窗口,需要切换句柄,先获取句柄列表
        self.driver.switch_to.window(li[1])  # 切换句柄
        tr_list = self.driver.find_elements(By.XPATH, '//*[@id="2020年10月份县以上行政区划代码_32423"]/table/tbody/tr')
        item = {}
        try:
            for tr in tr_list[3:]:
                one_city_list = tr.text.split()
                item["城市"] = one_city_list[1].strip()
                item["行政代码"] = one_city_list[0].strip()
                print(item)  # 打印
        except Exception as e:
            self.driver.quit()  # 出现异常退出

    def run(self):
        """
        function:  程序入口函数
              in:  None
             out:  None
          return:  None
          others:  Program Entry Func
        """
        self.parse_html()


if __name__ == '__main__':
    spider = MZBSpider()
    spider.run()

其中:

        li = self.driver.window_handles  # 出现两个窗口,需要切换句柄,先获取句柄列表
        self.driver.switch_to.window(li[1])  # 切换句柄

这两句是实现句柄切换的具体步骤

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

禾戊之昂

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

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

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

打赏作者

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

抵扣说明:

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

余额充值