Python requests.request无法获取页面动态修改的属性值问题咨询
问题解答
关于requests的理解错误说明
你的理解确实有误。requests库仅能获取服务器返回的原始静态HTML内容,本身不支持执行页面中的JavaScript代码。
你观察到的勾选复选框后data-role-type属性变更,是浏览器端JavaScript监听点击事件后,修改本地内存中DOM树产生的效果,这个修改是仅存在于浏览器运行时的,不会同步到服务器返回的原始HTML文件中,因此你用requests请求页面拿到的永远是默认的None值。
可行修复方案
方案1:使用支持JS渲染的自动化工具(最稳妥)
采用Selenium、Playwright这类浏览器自动化工具,真实模拟浏览器运行环境,会自动加载页面、执行JS代码、响应用户交互操作,可以直接获取到DOM修改后的属性值。Selenium示例代码如下:from selenium import webdriver from selenium.webdriver.common.by import By import time driver = webdriver.Chrome() # 替换为你的后台页面实际地址 driver.get("http://127.0.0.1:5000/admin/management/accounts/edit_user/Sergio%20ley/?token=你的实际token") # 模拟点击member角色对应的复选框,替换为你页面上复选框的实际定位方式 driver.find_element(By.ID, "替换为member复选框的实际id").click() # 等待JS执行完成 time.sleep(0.5) # 获取修改后的属性值 target_elem = driver.find_element(By.ID, "data-role-type-container") print(target_elem.get_attribute("data-role-type"))方案2:逆向前端逻辑直接计算值
如果你不想引入浏览器工具,可以查看页面的前端JS源码,梳理清楚复选框选中状态和data-role-type取值的对应规则,在你的代码里直接根据选中的角色拼接出对应的值即可,不需要请求页面读取属性。
内容的提问来源于stack exchange,提问作者Sergio Ley
相关产品推荐
相关产品推荐

