在上一次博客动态网页——selenium基础中我们在最后有提到frame的窗口切换,但是并没有细讲,所以今天就是用selenium来爬取一个qq邮箱,详细讲解selenium库@中frame的运用。
1、使用selenium总是出现定位错误?
很多人在动态网页爬取的时候使用selenium库的时候会遇到
这种错误,可是反复检查网页源代码,发现元素明明就在那里,用firebug也可以看到 ,但是就是不可以去定位它,这个时候我们就要考虑一下我们的窗口有没有切换了!
因为webDriver只能在一个页面上对元素进行识别和定位,对于frame/iframe表单内嵌页面上的元素无法直接定位。
2、切换——switch_to.frame()
driver=webdriver.Chrome("F:\..\chromedriver.exe")
driver.switch_to.frame(reference)
reference 是传入的参数,switch_to.frame()是默认的取id和name属性。
并不是每一个frame/iframe表单都有id和name属性,那么这时我们可以用什么?
1,用frame的index来定位,从0开始
driver.switch_to.frame(0)
2,WebElement对象,直接用selenium定位元素
#如使用find_element_by_tag_name()
driver.switch_to.frame(driver.find_element_by_tag_name("iframe"))
3、切换——switch_to.default_content()
我们切换到frame表单中就只能对表单中的元素进行识别和操作,要想对主界面的元素进行识别和定位,是不可以的。所以这个时候我们就要切换回主文档。也称释放frame。
driver.switch_to.default_content()
4、切换——switch_to.window()
如果获取新窗口的内容 switch_to.window(handle) 来进行窗口切换, 可以从window_handles集中进行遍历,结合判断进行。handle是窗口的唯一标识符相当于网页的ID。
driver=webdriver.Chrome("F:\..\chromedriver.exe")
for handle in driver.window_handles:
print(handle)
driver.switch_to.window(handle)
5、案例——爬取qq_邮箱
我们在上一篇博客刚讲过,qq邮箱的登录,所以这次的案例我们也还是爬取qq邮箱中的信息吧。
绝对不是因为我懒得再找案例👀
emmm这次的案例几乎是没有什么新知识点的,要是说有的话,就是我之前没有出过关于Xpath的解析,后面我再出一篇关于Xpath解析的好了。
本次呢,我是直接保存到数据库中的。