写在前面
1、为甚麽要模拟登录?
怎么说呢,现如今各大网站都需要用户登录后才可以访问到相关的信息,你不登录,它不给你机会。这就像是个门槛放在哪里,只有越过障碍,才能走上平坦大道。
2、为甚麽使用Selenium?
当然时它的可视化和自动化了,太有感觉了,自己就像上帝一样,写写代码,我的浏览器就自己动起来的,它不香嘛?
话不多说了,就动起来。
一、目标网站
当然时小编经常逛逛的blog:csdn
二、工具
主要是Selenium 模块,其他照旧。
三、网站分析
在这里小编介绍的是一种核心技术,即通过使用cookie的方法直接访问,后期访问的时候就一劳永逸了。
3.1 首次访问没有cookie
确实如此,使用selenium首次访问目标网站时,你并不知道cookie,那么我们该如何得到理想的cookie呢。
3.2 如何获取cookie
在这里有个取巧的方法,在我们使用selenium访问时,需要先手动登陆。这样一来,selenium还在运行时,我们人为的登陆到了目标网站,此时需要运用到selenium的一个方法get_cookies(),即我们将登陆后的cookie信息获取到,并保存在相应的文件中。关键代码如下
url = 'https://passport.csdn.net/login?code=mobile'
path = r'E:\\chromedriver_win32\chromedriver.exe'
driver = webdriver.Chrome(executable_path=path)
driver.get(url)
time.sleep(60)
with open('csdn_cookies.txt','w') as fp:
fp.write(json.dumps(driver.get_cookies()))
首先访问登陆界面的链接,让程序停止到60秒,目的当然时为了可以让我们有足够的时间来实现手动登陆,登陆之后,selenium 自然会执行保存cookie的操作。此时我们已经获取到了登陆状态的cookie.txt
3.3 利用cookie.txt进行登陆
既然得到了cookie,那么使用selenium 的另一个方法add_cookie(),访问目标网站时带上它即可。
driver.get('https://www.csdn.net/')
with open('csdn_cookies.txt','r') as fp:
cookies_list = json.load(fp)
for cookie in cookies_list:
# 将过期时间expiry删除,避免不必要的麻烦
if 'expiry' in cookie:
del cookie['expiry']
driver.add_cookie(cookie)
driver.refresh()
利用add_cookie()的方法,可以很容易带上cookie访问了。但是在这里有一个问题,就是为甚麽不先带上cookie,然后在进行访问目标网站,而是先访问目标网站,然后再带cookie,再刷新网页就可以了呢。
小编也实验过多次,认为,添加cookie时,需要让driver 知道向哪个域名添加,所以在添加cookie前,必须先访问下目标网站,之后再添加cookie,这样一来,driver就知道是往那个域名添加cookie了,此时只要刷新网页,就可以进入到登陆状态了。
四、结果展示
注意观察右上角,一开始页面时出现登陆/注册的字样,后来我们添加了cookie后,页面自动刷新了,此时,已经成功使用selenium模拟登陆到csdn了。
五、感慨万分
挺有趣的一个selenium!!!