Python Selenium结合Cookie实现Airbnb免密登录

顾星河
顾星河
发布时间:2026-10-16 | 4人浏览过
原创

本文介绍如何利用Python Selenium获取并复用Cookie,实现Airbnb网站的免密登录。通过手动登录后保存Cookie文件,后续请求直接加载Cookie,无需重复输入账号密码,有效提升爬虫效率。

在爬取Airbnb租房数据的过程中,登录环节成为了一个主要障碍。针对这一问题,我尝试并总结了一套解决方案。

HTTP协议本身是无状态的,网页应用如何维持用户的登录状态呢?这主要依赖于Session和Cookie两项技术。

下面先对Session和Cookie的基本概念进行简要说明。

Session对象用于存储特定用户会话所需的属性及配置信息。当用户在应用程序的Web页面之间跳转时,Session中存储的变量不会丢失,而是贯穿整个用户会话。如果用户请求来自应用程序的Web页面且尚未建立会话,Web服务器会自动创建一个新的Session对象。一旦会话过期或被主动放弃,服务器将终止该会话。

Cookie(复数形式为Cookies)是一种“小型文本文件”,通常经过加密,由网站存储在用户本地终端上,用于辨别用户身份并进行Session跟踪。这些信息可以由客户端计算机暂时或永久保存。

当用户首次访问某个网页时,服务器会创建一个Session对象以存储与该用户相关的属性和配置信息,并向客户端返回带有set-cookie字段的响应头。客户端浏览器会将该Cookie保存到本地。在后续访问该网页时,浏览器会自动携带该Cookie。服务器通过解析Cookie来识别用户是否存在对应的Session,从而完成登录注册功能的维持。尽管Session和Cookie的应用场景远不止于此,此处不再展开。

为了实现免密登录,我们需要执行以下关键步骤:

首先,获取登录Airbnb时客户端浏览器中存储的Cookies。

接着,将获取到的Cookies保存到本地文件中。

最后,在下次使用Selenium访问Airbnb时,将保存的Cookies加载到浏览器中。

具体获取Cookies的方法如下:

利用Selenium提供的get_cookies()函数即可获取当前浏览器的Cookies。

这里存在一个逻辑问题:如何先获取登录后的Cookie?解决方法是在代码中加入一段休眠时间,利用这段等待时间手动完成登录操作。待休眠结束,代码再执行记录Cookies的操作即可。

import time
 
from msedge.selenium_tools import Edge, EdgeOptions
import chardet
 
 
# 返回一个driver对象
def activate_selenium_driver():
    options = EdgeOptions()
    # options.use_chromium = True
    options.add_experimental_option('excludeSwitches', ['enable-automation'])
    options.binary_location = r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"  # 浏览器的位置
    driver = Edge(options=options, executable_path=r"D:\ERic\WORK\python\Spider\msedgedriver.exe")  # 相应的浏览器的驱动位置
    return driver
 
 
def check_charset(file_path):
    with open(file_path, "rb") as f:
        data = f.read(4)
        charset = chardet.detect(data)['encoding']
    return charset
 
baseurl = 'https://www.airbnb.cn/s/%E6%B7%B1%E5%9C%B3/homes?refinement_paths%5B%5D=%2Fhomes&current_tab_id=home_tab&selected_tab_id=home_tab&screen_size=large&hide_dates_and_guests_filters=false&place_id=ChIJkVLh0Aj0AzQRyYCStw1V7v0&map_toggle=false'
driver = activate_selenium_driver()
driver.get(baseurl)
 
# 20秒的休眠时间以手动完成登陆
for i in range(0, 20):
    print(20 - i)
    time.sleep(1)
 
# 获取cookies
cookies = driver.get_cookies()
 
# 保存到本地
with open('cookies.txt', 'w', encoding=check_charset('cookies.txt')) as f:
    for i in cookies:
        f.write(str(i))
        f.write('\n')

以下是携带Cookies实现免密登录的代码示例:

baseurl = 'https://www.airbnb.cn/s/%E6%B7%B1%E5%9C%B3/homes?refinement_paths%5B%5D=%2Fhomes&current_tab_id=home_tab&selected_tab_id=home_tab&screen_size=large&hide_dates_and_guests_filters=false&place_id=ChIJkVLh0Aj0AzQRyYCStw1V7v0&map_toggle=false'
driver.get(baseurl)
cookies = []
with open('cookies.txt', 'r', encoding=funcs.funcs.check_charset('cookies.txt')) as f:
    for i in f:
        cookies.append(eval(i.strip()))
 
for i in cookies:
    driver.add_cookie(i)
 
time.sleep(3)
driver.refresh()

再次打开Airbnb页面时,可以发现系统已处于登录状态,至此目标达成。

以上就是关于Python Selenium结合Cookie实现免密登录的示例代码。如需了解更多关于Selenium和Cookie免密登录的内容,建议搜索本站历史文章或继续浏览后续相关文章,感谢大家的支持!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表