您当前的位置: 首页 >  爬虫

奇巧小软件

暂无认证

  • 4浏览

    0关注

    16博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

8.爬虫:网站模拟登陆

奇巧小软件 发布时间:2022-09-07 11:56:05 ,浏览量:4

一.网站模拟登陆的原理是什么 ?

http协议是无状态的协议,是一次性的请求,访问后连接就断开了

既然请求之间是没联系的,那网站如何知道两个请求是否是同一个用户访问的?

原理:

1)服务器在用户登陆成功后,会给用户返回一段字符串sessionid

  • 够复杂,无法伪造

  • cookie在http协议中就是一段文本信息,写在http协议的headers中

2)服务器中维护一个sessionid 与 用户的映射关系(字典)

3)浏览器能解析这些值,并把这些信息保存在本地文件中.这就是缓存,在每次请求都自动带上这个sessionid

alt session与cookie的区别

session是由服务器维护,通过set-cookie交给浏览器

cookie是浏览器取到服务器传来的值,并保存在本地,并在每次请求都带上这些值,供服务器做逻辑判断的.至此,服务器就具有了识别用户的功能

重点:这就是模拟登陆的原理,只要requests请求的时候带上cookie,那么服务器就认为你是登陆的,就能给你返回登陆后的数据 那么如何拿到cookie呢

方法1:自动携带cookie

session = requests.session()#假设以下这个是登陆请求res = session.post('http://127.0.0.1/index',data={})#假设这个页面是需要登陆后才能访问,使用了这种方式后,#不需要在get请求里面在携带cookie,而是自动携带了res1 = session.get('http://127.0.0.1/order')

以上这种方式只在程序运行中有效

方法2:将cookie保存到文件中并从文件中读取cookie

import picklesession = requests.session()res = session.post(url, data=post_data, headers=headers)with open("douban.cookie", "wb") as f:    pickle.dump(res.cookies, f)    #读取文件中cookies    with open("douban.cookie", "rb") as f:    cookies = pickle.load(f)html = requests.get("https://www.douban.com/", cookies=cookies).text

方法3:使用selenium来完成模拟登陆

import timeimport requestsfrom selenium import webdriverurl = "https://www.douban.com/"browser = webdriver.Chrome(executable_path="chromedriver_win32/chromedriver.exe")def login():    #通过selenium模拟登录都豆瓣    username = "18782902568"    password = "admin123"    browser.get(url)    time.sleep(3)        #针对的特殊处理    browser.switch_to.frame(browser.find_element_by_tag_name("iframe"))    login_ele = browser.find_element_by_xpath("//li[@class='account-tab-account']")    login_ele.click()    username_ele = browser.find_element_by_xpath("//input[@id='username']")    password_ele = browser.find_element_by_xpath("//input[@id='password']")    username_ele.send_keys(username)    password_ele.send_keys(password)    submit_btn = browser.find_element_by_xpath("//a[@class='btn btn-account btn-active']")    submit_btn.click()    time.sleep(10)    cookies = browser.get_cookies() # 重点    cookie_dict = {}    for item in cookies:        cookie_dict[item["name"]] = item["value"]    res = requests.get(url, cookies=cookie_dict)    if "bobby_liyao" in res.text:        print("已经登录")if __name__ == "__main__":    login()

本文由 mdnice 多平台发布

关注
打赏
1661325404
查看更多评论
立即登录/注册

微信扫码登录

0.0352s