【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、梳理需求

【Python_Selenium学习笔记(六)】基于Selenium模块实现切换句柄_第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])  # 切换句柄

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

你可能感兴趣的:(Python学习笔记,#,Selenium学习笔记,python,selenium,网络爬虫,爬虫)