[python爬虫] Selenium高级篇之窗口移动、弹出对话框自登录

在我们使用Selenium Python制作自动爬虫和网页自动测试的时候,通常会遇到弹出新的窗体或对话框的时候,此时你捕获的窗体已经被打断,从而干扰你的爬虫。
那怎么解决这个问题呢/span>

本篇文章主要记录两段代码解决这类问题:
    第一个是click()函数点击超链接后,需要捕获弹出新窗体的信息,此时需要调用switch_to_window()函数切换窗体,再捕获新的数据;
    第二个是click()函数点击超链接后,弹出登录的对话框,比如百度首页登录,此时需要调用switch_to_alert()函数获取该alert对象。

文章主要是结合实际问题进行叙述,内容比较基础,希望对您有所帮助,如果存在错误或不足之处,还请海涵。更多爬虫主题参考我的专栏:http://blog.csdn.net/column/details/eastmount-spider.html


一. Switch_to_window函数实现窗体切换

在使用Selenium爬取知识过程,通常会遇到_blank弹出新窗体,或窗体是弹出的那种情况,而且有的需要登录,如:新浪微博、公众号、京东等,使用webdriver.Firefox()重新打开新窗体是无法加载已有信息的。这时候就需要通过获取当前句柄再进行窗口切换。

这里使用该方法实现获取CSDN知识库的关键词的标题及超链接信息,因为它是_blank弹出新窗体,再获取弹出窗体的技术介绍。需要注意每次窗口句柄移动都需要重新定位它们的主窗体。

核心代码:

步骤如下:
    1.首先,current_window_handle获取当前首页窗体并保存;
    2.然后调用find_elements_by_xpath()获取首页多个关键词超链接(多个<li>),for循环访问;
    3.在循环中点击超链接,弹出新的窗体,循环找到不是首页窗体的,调用switch_to_window进行跳转;
    4.爬取新窗体关键词的介绍信息,位于div[@class=’coltop clearfix’]/div[2]下;
    5.关闭当前窗体,重新返回首页窗体的超链接,循环执行3-5步骤。

部分输出如下所示:
CSDN知识库如下图所示,首页显示了多个技术的关注信息及资源数量。

[python爬虫] Selenium高级篇之窗口移动、弹出对话框自登录
点击后,会弹出新的窗体,而Selenium却定位了当前首页的窗体,此时就需要利用switch_to_window来切换窗体。

[python爬虫] Selenium高级篇之窗口移动、弹出对话框自登录



二. Switch_to_alert函数捕获弹出对话框

注意:一定不要尝试该方法登陆百度、新浪、淘宝这些网站后爬取数据,账号可能被永久封号的。
比如百度首页,点击登录界面会弹出对话框如下图所示:

[python爬虫] Selenium高级篇之窗口移动、弹出对话框自登录

首先,需要获取“登录”的位置,超链接<a>直接xpath定位总是失败,故作者才采用的

来源:Eastmount

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2017年7月8日
下一篇 2017年7月9日

相关推荐