Python爬虫如何访问浏览器LocalStorage?已尝试BS4与Selenium
问题解决指南
一、BS4爬取为空的原因
目标网站是单页应用(SPA),requests.get()只能获取初始的空白框架HTML,页面实际内容由JavaScript动态渲染生成,所以BS4无法提取到有效数据,必须使用支持JS渲染的工具(如Selenium)。
二、让Selenium加载本地浏览器的LocalStorage
Selenium默认启动临时浏览器实例,不会加载本地浏览器的LocalStorage。要保留原有LocalStorage,需指定加载本地用户数据目录:
Chrome示例代码
from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By def getPage(): url = "https://dofusdb.fr/fr/tools/craft-manager" options = Options() # 替换为你的Chrome用户数据路径 # Windows路径示例:C:\Users\你的用户名\AppData\Local\Google\Chrome\User Data # Mac路径示例:~/Library/Application Support/Google/Chrome/Default options.add_argument(r"--user-data-dir=C:\Users\YourUsername\AppData\Local\Google\Chrome\User Data") # 可选:指定具体配置文件(多用户时用) # options.add_argument("--profile-directory=Default") # 若使用无头模式,需添加以下参数避免渲染问题 # options.headless = True # options.add_argument("--window-size=1920,1080") driver = webdriver.Chrome(options=options) driver.get(url) # 等待页面加载完成(显式等待更可靠) WebDriverWait(driver, 15).until( EC.presence_of_element_located((By.CLASS_NAME, "q-pa-sm")) ) # 获取渲染后的页面源码 page_source = driver.page_source # 直接提取LocalStorage数据(无需复杂JS知识) local_storage = driver.execute_script(""" const data = {}; for (let i = 0; i < localStorage.length; i++) { const key = localStorage.key(i); data[key] = localStorage.getItem(key); } return data; """) print("LocalStorage数据:", local_storage) driver.quit() return page_source
注意事项
- 运行前需关闭本地Chrome浏览器,避免配置文件冲突。
- 路径需替换为你自己的用户数据路径,可通过Chrome地址栏输入
chrome://version/查看"个人资料路径"。
三、直接提取LocalStorage数据
无需深入学习JavaScript,使用Selenium的execute_script()方法即可一键获取LocalStorage所有键值对,返回结果为Python字典,直接处理即可。
四、Opera浏览器的Selenium配置
- 下载对应版本的OperaDriver:需与你的Opera浏览器版本完全匹配,可从Opera官方开发者渠道获取。
- 配置用户数据路径:
- Windows路径:
C:\Users\你的用户名\AppData\Local\Opera Software\Opera Stable - Mac路径:
~/Library/Application Support/com.operasoftware.Opera/
- Windows路径:
- 示例代码:
from selenium import webdriver from selenium.webdriver.opera.options import Options def getOperaPage(): url = "https://dofusdb.fr/fr/tools/craft-manager" options = Options() options.add_argument(r"--user-data-dir=C:\Users\YourUsername\AppData\Local\Opera Software\Opera Stable") # 指定OperaDriver的路径 driver = webdriver.Opera(executable_path=r"path/to/operadriver.exe", options=options) driver.get(url) # 等待加载并提取数据(同Chrome逻辑) driver.implicitly_wait(10) local_storage = driver.execute_script(""" const data = {}; for (let i = 0; i < localStorage.length; i++) { const key = localStorage.key(i); data[key] = localStorage.getItem(key); } return data; """) driver.quit() return local_storage
五、关于本地LocalStorage的存储位置
LocalStorage数据存储在浏览器的配置文件夹中,以SQLite数据库文件形式保存:
- Chrome:
用户数据路径\Local Storage\leveldb下的.ldb文件 - Firefox:
用户数据路径\storage\default\moz-safe-about+home\idb下的文件
但直接读取这些文件非常复杂,远不如用Selenium通过JS提取方便,不建议直接操作本地文件。
内容的提问来源于stack exchange,提问作者Noah Fraiture
相关产品推荐
相关产品推荐

