selenium窗口切换(以爬取纵横小说网为例)

selenium窗口切换(以爬取纵横小说网为例)

如果遇到二级窗口,就需要切换窗口,关闭新打开的标签页,并不能让代码自动进行窗口句柄的切换

1. 获取当前窗口的句柄

main_window = driver.current_window_handle

2. 点击链接,打开新的标签页

点击的时候,driver仍然控制着第一个窗口,由于a标签的target属性是_blank,所以出现了第二个窗口

tag_a = book.find_element_by_xpath('.//div/a')  # 这是定位的链接
tag_a.click()

可以通过driver.window_handles查看当前标签页的个数

print('当前总共有{}个窗口'.format(len(driver.window_handles)))

3. 获得刚打开的标签页

book_detail_window = driver.window_handles[-1]

4. 切换为新标签页

driver.switch_to.window(book_detail_window)

操作结束后,新标签页没用了,所以使用close关闭,然后切换到原来的标签

driver.close()  # 第二个窗口没用了,所以使用close关闭
driver.switch_to.window(main_window)

5. 最后附上完整的代码

from selenium import webdriver

driver = webdriver.Chrome()  # 创建对象
driver.set_window_size(1920, 1080)  # 设置固定大小
driver.implicitly_wait(5)  # 等待元素出现
url = 'http://www.zongheng.com/rank/details.html?rt=6&d=1&p=1'
driver.get(url)  # 发送请求
main_window = driver.current_window_handle  # 获得当前窗口的句柄
# print(main_window)
book_list = driver.find_elements_by_xpath('//div[contains(@class,"rank_d_list")]')
# print(book_list)
for book in book_list:
    # print('当前总共有{}个窗口'.format(len(driver.window_handles)))  # 1个窗口
    name = book.get_attribute('bookname')
    tag_a = book.find_element_by_xpath('.//div/a')
    tag_a.click()  # 点击的时候,driver仍然控制着第一个窗口,由于a标签的target属性是_blank,所以出现了第二个窗口
    # print('当前总共有{}个窗口'.format(len(driver.window_handles)))  # 当前有2个窗口

    book_detail_window = driver.window_handles[-1]  # 最后那个窗口
    driver.switch_to.window(book_detail_window)  # 切换到第二个窗口才能操作第二个窗口
    print(name, driver.find_element_by_xpath('//div[@class="nums"]').text)  # 在第二个窗口
    driver.close()  # 第二个窗口没用了,所以使用close关闭
    driver.switch_to.window(main_window)  # 要操作第一个窗口,先切换到第一个窗口

    # break

driver.quit()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值