利用Selenium来实现知乎和Bilibili的登录

目录 技术

Python的爬虫工具很多。比较常见的工具有urllib/requests/scrapy/Beatifulsoup等等。最近在用一个叫Selenium的工具,支持JAVA和Python,用起来非常方便。Selenium最开始是用来做测试的。其用处就是可以用来控制浏览器的行为,例如打开网站、获取数据、执行js等等。Selenium配合BrowserMob甚至能够对网站的network traffic进行嗅探,例如我想利用爬虫下载一些视频网站上的一个视频,直接分析其视频原地址是比较麻烦的事情,而且每个网站的视频地址规则差别巨大。但是利用Selenium和BrowserMob进行嗅探,就可以轻松找到视频原地址进行下载。Selenium支持Chrome、火狐以及PhantomJS等浏览器。

这里贴个演示的视频:

知乎网站的登录

我们先来看看知乎的登录。知乎的登录相比较而言简单一些。我们看一下其登录页面登录区域的代码。

可以看出账号和密码的输入还是比较简单的,可以直接利用name来进行输入。账号输入的name是account,密码输入的name是password。另外一个问题就是知乎登录有时候是需要验证码的,这个自己手动输入和点击即可。(这里暂时不讨论captcha的识别问题)。
输入账号密码之后,就可以直接登录了。知乎登录可以用xpath来定位登录按钮。这里登录按钮的xpath是/html/body/div/div/div[2]/div[2]/form/div[2]/button
接下来就可以写出我们代码了。

这里面的time.sleep(7)是为了给有时候会出现的验证码提供输入时间。

Bilibili网站的登录

Bilibili网站登录页面稍微复杂一些。第一是其验证码是异步的。网页加载之后不是立马出现验证码的。这也给验证码识别带来的难度。这里我们依然不考虑验证码识别的问题,采取手动输入验证码。

账号密码同样适用name='userid'以及name='pwd'来输入。
输入账号密码之后,给10秒钟时间手动输入验证码。然后考虑登录的问题,这里B站的登录比知乎稍微复杂一点,登录不是简单的点击一个按钮,而是提交一个form或者提交一个input。
因此在定位好form之后,不是click而是submit。接下来就可以写出我们代码了。

这里面的time.sleep(10)是为了给验证码提供输入时间。

8 条评论

  • cy
    2016年9月18日

    沙发

  • 1111
    2016年9月26日

    一直提示错误:selenium.common.exceptions.WebDriverException: Message: ‘chromedriver’ executable needs to be in PATH. Please see https://sites.google.com/a/chromium.org/chromedriver/home

    • 刘浩
      2016年9月26日

      首先,Chrome提示出错是因为你的chromedriver没有安装在python路径下。
      其次,你换成Firefox之后,提示出错。我文章代码第六行替换成
      browser = webdriver.Firefox()
      发现是没有问题的。不清楚你那边具体是什么报错。

      • 111
        2016年9月26日

        用火狐的时候,代码改过了,和你说的一样,但一直显示无效地址,不知道错误,在哪,chromdrive我也安装到Python路径下了,依然很无力

      • 111
        2016年9月26日

        搞定了,之前是谷歌浏览器配置有问题,验证码你是手动输入的吗?

        • 刘浩
          2016年9月26日

          验证码不一定要输入的。知乎是登录了好多次才会提示要输入验证码。比如你等等明天试试这段代码,登录知乎,就不会让你输入验证码了。

  • 1111
    2016年9月26日

    好多网站的xpath解析出来,都无法用上面的方法登录,博主能给个selenium的文档地址吧,研究下,没找到中文版本很好的

    • 刘浩
      2016年9月26日

      我回头自己写个吧。。selenium目前中文还没有什么很好的文档。

发表评论

电子邮件地址不会被公开。 必填项已用*标注