爬虫之selenium标签页的切换
当selenium控制浏览器打开多个标签页时,如何控制浏览器在不同的标签页中进行切换呢?需要我们做以下两步:
- 获取所有标签页的窗口句柄 【获取窗口句柄,通过窗口句柄切换标签】
-
利用窗口句柄字切换到句柄指向的标签页
- 这里的窗口句柄是指:指向标签页对象的标识
查看标签页显示示例代码如下:
from selenium import webdriver
url = 'https://jn.58.com/'
driver = webdriver.Chrome()
driver.get(url)
print(driver.current_url)
print(driver.window_handles)
# 定位并点击租房按钮
el = driver.find_element_by_xpath('/html/body/div[3]/div[1]/div[1]/div/div[1]/div[1]/span[1]/a')
el.click()
print(driver.current_url)
print(driver.window_handles)
运行效果如下:
-
【这儿可能会报错的地方是,如果弹出的浏览器没有放全屏,此时租房按钮处刚好有广告覆盖,则会报错,之后博客中会写解决办法】
-
具体的方法
# 1. 获取当前所有的标签页的句柄构成的列表 current_windows = driver.window_handles # 2. 根据标签页句柄列表索引下标进行切换 driver.switch_to.window(current_windows[0]) 一般刚打开的标签会放在列表的最后一个,这儿可以直接写-1
-
参考代码示例:
from selenium import webdriver
url = 'https://jn.58.com/'
driver = webdriver.Chrome()
driver.get(url)
print(driver.current_url)
print(driver.window_handles)
# 定位并点击租房按钮
el = driver.find_element_by_xpath('/html/body/div[3]/div[1]/div[1]/div/div[1]/div[1]/span[1]/a')
el.click()
print(driver.current_url)
print(driver.window_handles)
# 标签页的切换
driver.switch_to.window(driver.window_handles[-1]) # 这行可以注释掉看看运行效果,这样的话len(el_lsit)应该是=1
el_list = driver.find_elements_by_xpath('/html/body/div[7]/div[2]/ul/li/div[2]/h2/a')
print(len(el_list))
运行效果: