利用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)是为了给验证码提供输入时间。

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

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

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

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