Selenium模拟登陆知乎

Python+Selenium模拟登陆知乎

当我登录的时候访问知乎,看到的首页是这样的:

知乎

但是当我没有登录的时候,访问知乎首页,看到的是这样的:

知乎

而如果我们使用下面的代码访问知乎:

import requests

data = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36'} #这里涉及到了user-agent的修改,我们在下一课讲解
source = requests.get('https://zhihu.com', headers=data).text
print(source)

我们会发现得到的源代码是图片二的源代码。对于这样的网站,我们需要让爬虫登录网站才能爬取信息。本文将要讲解使用Python模拟登录网站。

使用Selenium来进行模拟登录,整个过程非常的简单,只需要输入账号,输入密码,然后登录即可。流程如下:

  • 初始化chromedriver
  • 打开知乎登录页面
  • 找到用户名的输入框,输入用户名
  • 找到密码输入框,输入用户名
  • 按下回车键
  • 以上过程,我们使用Selenium, 在一般情况下只需要不到20行代码。

    我们涉及到的代码如下:

    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    import time
    
    driver = webdriver.Chrome('./chromedriver') #填写你的chromedriver的路径
    driver.get("https://www.zhihu.com/#signin")
    
    elem = driver.find_element_by_name("account") #寻找账号输入框
    elem.clear()
    elem.send_keys("yyyyy") #输入账号
    password = driver.find_element_by_name('password') #寻找密码输入框
    password.clear()
    password.send_keys("xxxxxx") #输入密码
    elem.send_keys(Keys.RETURN) #模拟键盘回车键
    time.sleep(10) #大家这里可以直接sleep, 也可以使用上一课讲到的等待某个条件出现
    print(driver.page_source)
    driver.close()
    

    为什么我要强调一般情况呢?那是因为知乎实际上也是有验证码的,只是在一般情况下不需要输入验证码。如果你的IP地址异常,或者你反复多次登录又退出,知乎会认为你的账号异常,这种情况下就会出现验证码。
    待续…

    Leave a Comment