如何用Robot Framework/Python获取站点文件夹文件列表?API相关疑问
解决方案与建议
一、关于未公开API的可用性判断
你可以先尝试验证这个API的可用性:
- 打开浏览器Network Tab,找到该请求并复制请求头(尤其是Cookie、Authorization这类身份验证字段),用Postman或Robot的RequestsLibrary发送相同请求,看是否能返回JSON/XML这类结构化数据。
- 注意风险:未公开API没有官方维护承诺,字段、参数甚至URL都可能随时变更;同时要确认网站服务条款是否禁止直接调用内部API,避免合规问题。如果是个人临时使用且无明确禁止,可尝试,但长期依赖不推荐。
二、浏览器Network Tab核心字段快速理解
不用找外部资源,实操学习最快,核心字段说明:
- Name:请求的资源路径或别名,点击可查看请求详细信息
- Status:HTTP状态码,200代表请求成功,401代表身份验证失效,404代表资源不存在
- Type:返回资源的类型,比如
json是结构化数据接口,document是网页文档,script是脚本文件 - 重点关注标签页:
- Headers:请求头(如Cookie、User-Agent)和响应头(如Content-Type)
- Payload:GET请求的查询参数、POST请求的提交数据
- Response:服务器返回的具体内容,判断是否包含所需的文件夹/文件数据
随便打开一个网站,刷新页面后逐个点击Network里的请求,对照上述说明查看字段,很快就能掌握基本用法。
三、Robot Framework实现文件名获取的两种方法
方法1:UI自动化遍历(稳定但速度慢)
用SeleniumLibrary模拟人工操作,递归遍历文件夹和子文件夹:
*** Settings *** Library SeleniumLibrary *** Variables *** ${BASE_URL} http://example.com/applications/folders/ ${FOLDER_LOCATOR} xpath://div[contains(@class,'folder-item')] ${FILE_LOCATOR} xpath://div[contains(@class,'file-item')] *** Test Cases *** Collect All Files Open Browser ${BASE_URL} chrome # 此处省略已完成的登录步骤 ${all_files}= Create List Call Keyword TraverseFolder ${all_files} Log List ${all_files} Close Browser *** Keywords *** TraverseFolder [Arguments] ${file_list} # 获取当前页面所有文件并加入列表 ${current_files}= Get WebElements ${FILE_LOCATOR} :FOR ${file} IN @{current_files} \ ${name}= Get Text ${file} \ Append To List ${file_list} ${name} # 递归遍历子文件夹 ${folders}= Get WebElements ${FOLDER_LOCATOR} :FOR ${folder} IN @{folders} \ Click Element ${folder} \ Sleep 2s # 等待页面加载 \ Call Keyword TraverseFolder ${file_list} \ Go Back \ Sleep 2s # 等待回退加载
方法2:调用API接口(速度快但依赖API稳定性)
用RequestsLibrary直接请求API,解析JSON响应获取文件名:
*** Settings *** Library RequestsLibrary Library Collections *** Variables *** ${API_BASE} http://example.com/exp/api/app/objects ${SESSION_COOKIE} # 从登录后的浏览器Cookie中提取,如SESSIONID=xxx ${AUTH_TOKEN} # 如果有Bearer Token,填写此处 *** Test Cases *** FetchFilesViaAPI Create Session example_api ${API_BASE} # 构造带身份验证的请求头 ${headers}= Create Dictionary Set To Dictionary ${headers} Cookie ${SESSION_COOKIE} Set To Dictionary ${headers} Authorization Bearer ${AUTH_TOKEN} ${all_files}= Create List Call Keyword FetchFolderData /appFolder/?brief=true ${headers} ${all_files} Log List ${all_files} *** Keywords *** FetchFolderData [Arguments] ${api_path} ${headers} ${file_list} ${resp}= Get Request example_api ${api_path} headers=${headers} Should Be Equal As Integers ${resp.status_code} 200 # 解析JSON响应(假设返回结构为{"data": {"folders": [], "files": []}}) ${data}= Convert To Json ${resp.content} # 添加当前文件夹的文件 :FOR ${file} IN @{data['data']['files']} \ Append To List ${file_list} ${file['name']} # 递归请求子文件夹 :FOR ${folder} IN @{data['data']['folders']} \ ${sub_path}= Catenate /appFolder/${folder['id']}/?brief=true \ Call Keyword FetchFolderData ${sub_path} ${headers} ${file_list}
内容的提问来源于stack exchange,提问作者Palwin
相关产品推荐
相关产品推荐

