在爬取网页时,有时候会需要在几个网页中进行切换,那么怎么利用selenium来模拟网页切换呢
1 """如何切换网页窗口"""
2
3 from selenium import webdriver
4
5 if __name__ == "__main__":
6 driver = webdriver.Chrome()
7 driver.get('https://www.douban.com/')
8
9 # 依次打开“电影”、“音乐”、“读书”标签的三个窗口
10 driver.find_element_by_xpath('//*[@id="anony-nav"]/div[1]/ul/li[2]/a').click()
11 driver.find_element_by_xpath('//*[@id="anony-nav"]/div[1]/ul/li[3]/a').click()
12 driver.find_element_by_xpath('//*[@id="anony-nav"]/div[1]/ul/li[1]/a').click()
13 # 还可以通过selector进行click
14 driver.find_element_by_css_selector('#anony-nav > div.anony-nav-links > ul > li:nth-child(2) > a').click()
15
16 # 1.获取当前所有的窗口
17 current_windows = driver.window_handles
18 print(current_windows) # 返回值为包含窗口值的list
19
20 # 2.根据窗口索引进行切换
21 driver.switch_to.window(current_windows[1])
在爬取网页时,对于<body>标签中的<iframe>标签内容往往难以直接获取,因此我们在查找元素前要先切换到内联框架。
1 """如何进入嵌套网页"""
2 from selenium import webdriver
3
4 if __name__ == "__main__":
5 driver = webdriver.Chrome()
6 driver.get('https://www.douban.com/')
7
8 driver.switch_to.frame(0) # 进入嵌套网页
9 driver.find_element_by_xpath('/html/body/div[1]/div[1]/ul[1]/li[2]').click()
10 # 定位到账号输入框,并输入手机号
11 driver.find_element_by_xpath('//*[@id="username"]').send_keys('注册过的手机号')
12 # 定位到密码输入框,并输入密码
13 driver.find_element_by_xpath('//*[@id="password"]').send_keys('设置的密码')
14 # 定位到登陆按钮,并点击
15 driver.find_element_by_xpath('/html/body/div[1]/div[2]/div[1]/div[5]/a').click()