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()

你可能感兴趣的:(爬虫)