环境准备

python3.5

selenium模块


模拟登陆思路

通过selenium中的webdriver控制浏览器登录目标网站,然后获取模拟登陆需要的Cookie,再利用此Cookie来达到登录的效果。本次我们使用webdriver来驱动火狐浏览器插件。在登录网站时,cookie保存在发起请求的客户端中,网站服务器利用cookie来区分不同的客户端。cookie里面记录了“访问登录后才能看到的页面”这一行为的信息,含有能够向服务器证明:“我刚才登录过”。因此cookie可以用来标识客户端的身份,以存储它的信息。

登录步骤

导入模块


from selenium import webdriver
import requests
import json


启动浏览器

通过webdriver驱动火狐浏览器,然后在加载将要访问的目标网站


driver = webdriver.Firefox()
driver.get('目标网站')


点击登录


找到网页中登录按钮所在的位置,通过浏览器模拟点击打开登录框,然后找到用户名和密码框的位置,输入用户名及密码,在寻找按钮以及密码输入框时可鼠标右键然后找到“查看元素”选项,点击之后可在网页源码中寻找。代码如下


#清空登录框
driver.find_element_by_xpath("./*//input[@name='username']").clear()
#自动填入登录用户名
driver.find_element_by_xpath("./*//input[@name='username']").send_keys(user)
#清空密码框
driver.find_element_by_xpath("./*//input[@name='password']").clear()
#自动填入登录密码
driver.find_element_by_xpath("./*//input[@name='password']").send_keys(password)
time.sleep(8)
#点击登录按钮进行登录
driver.find_element_by_xpath("./*//button[@name='loginsubmit']").click()
time.sleep(10)


记录cookie


经过上面几步,如果没有报错的话就说明已经登录成功了,接下来我们再次加载网页获取登录cookie。代码如下


driver.get('目标网站')
#获取cookies
cookie_items = driver.get_cookies()
for cookie_item in cookie_items:
    post[cookie_item['name']] = cookie_item['value']
cookie_str = json.dumps(post)
with open('cookie.txt''w', encoding='utf-8'as f:
    f.write(cookie_str)
f.close()


通过cookie登录


获得cookie之后,模拟登陆就跟之前一样用requests请求网站,只需要将cookie内容加到请求中即可。代码如下


header = {"User-Agent""Mozilla/5.0 (Windows NT 6.1; WOW64;rv:53.0) Gecko/20100101 Firefox/53.0"}
with open('cookie.txt''r', encoding='utf-8'as f:
    cookie = f.read()
cookies = json.loads(cookie)
res = requests.get(url=url, cookies=cookies, headers=header)


对于有些网站来说,cookie的生命期较长,所以在第一次登陆获取cookie后,在以后模拟登陆时只需要调用此cookie即可,十分方便。


具体代码如下


from selenium import webdriver
import time
import json

user="用户名"
password="密码"

driver = webdriver.Firefox()
driver.get('目标网站')
time.sleep(5)
driver.find_element_by_xpath("./*//button[@type='submit']").click()
print("正在输入用户名和密码")
#清空登录框
driver.find_element_by_xpath("./*//input[@name='username']").clear()
#自动填入登录用户名
driver.find_element_by_xpath("./*//input[@name='username']").send_keys(user)
#清空密码框
driver.find_element_by_xpath("./*//input[@name='password']").clear()
#自动填入登录密码
driver.find_element_by_xpath("./*//input[@name='password']").send_keys(password)

time.sleep(8)
#点击登录按钮进行登录
driver.find_element_by_xpath("./*//button[@name='loginsubmit']").click()
time.sleep(10)
driver.get('目标网站')
#获取cookies
cookie_items = driver.get_cookies()

#获取到的cookies是列表形式,将cookies转成json形式并存入本地名为cookie的文本中
for cookie_item in cookie_items:
    post[cookie_item['name']] = cookie_item['value']
cookie_str = json.dumps(post)
with open('cookie.txt''w', encoding='utf-8'as f:
    f.write(cookie_str)
f.close()
print("登录完成")


最后,相信有了这份代码,能在您爬取网站需要登录时提供帮助,完整代码获取可在公众号中回复“login”。关注python练手项目实战,分享更多python学习项目。