|
@@ -1,4 +1,4 @@
|
|
-package main
|
|
|
|
|
|
+package ruizide
|
|
|
|
|
|
import (
|
|
import (
|
|
"context"
|
|
"context"
|
|
@@ -19,28 +19,15 @@ import (
|
|
|
|
|
|
// 定义选择器
|
|
// 定义选择器
|
|
var (
|
|
var (
|
|
- downloadDir = "D:\\download"
|
|
|
|
- defaultDir = "C:\\Users\\Guo Mengyuan\\Downloads"
|
|
|
|
|
|
+ downloadDir = utils.RZD_EXCEL_PATH
|
|
|
|
+ defaultDir = utils.RZD_DOWNLOAD_PATH
|
|
rzdLoginPath = "https://clients.rystadenergy.com/clients/"
|
|
rzdLoginPath = "https://clients.rystadenergy.com/clients/"
|
|
rzdBatchSize = 500
|
|
rzdBatchSize = 500
|
|
|
|
|
|
- clientSearchLink = `div.d-none.d-lg-flex.flex-grow-1 a[href="/clients/search/"]`
|
|
|
|
- clientsCubeDashboardsLink = `div.d-none.d-lg-flex.flex-grow-1 a[href="/clients/cube-dashboards/"]`
|
|
|
|
- supplyRevisionAnalysisSelector = `div.ais-Hits li h5:contains("Supply Revision Analysis")`
|
|
|
|
- oilDemandAnalysisSelector = `div.ais-Hits li[contains(., 'Oil Demand Analysis')]`
|
|
|
|
- oilSupplyAnalysisSelector = `div.ais-Hits li[contains(., 'Oil Supply Analysis')]`
|
|
|
|
- dateSlicerInputSelector = `div.visualContainer.unselectable.readMode.hideBorder.visualHeaderBelow.droppableElement.ui-droppable div.date-slicer-control input.date-slicer-input.enable-hover`
|
|
|
|
- downloadButtonSelector = `div.btn.btn-link.btn-sm.dashboard-action.dashboard-action--download-data`
|
|
|
|
-
|
|
|
|
- oilDemandIframeSelector = `div#WithPollingInFrame iframe` // 根据实际 iframe 的选择器更新
|
|
|
|
- tabSelectorBase = `h3.preTextWithEllipsis` // H3 标签中每个标签的基础选择器
|
|
|
|
|
|
+ clientSearchLink = `div.d-none.d-lg-flex.flex-grow-1 a[href="/clients/search/"]`
|
|
|
|
+ downloadButtonSelector = `div.btn.btn-link.btn-sm.dashboard-action.dashboard-action--download-data`
|
|
)
|
|
)
|
|
|
|
|
|
-// 函数用于点击下载按钮
|
|
|
|
-func clickDownload(ctx context.Context) error {
|
|
|
|
- return chromedp.Run(ctx, chromedp.Click(downloadButtonSelector, chromedp.ByQuery))
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
// 处理数据下载的步骤
|
|
// 处理数据下载的步骤
|
|
func downloadData(ctx context.Context) error {
|
|
func downloadData(ctx context.Context) error {
|
|
// Analytics Library
|
|
// Analytics Library
|
|
@@ -164,12 +151,12 @@ func moveFile(source, destination string) error {
|
|
}
|
|
}
|
|
|
|
|
|
// 解析网页数据,下载文件
|
|
// 解析网页数据,下载文件
|
|
-func main() {
|
|
|
|
- //func resolverNet() {
|
|
|
|
|
|
+// func main() {
|
|
|
|
+func ResolverNet(cont context.Context) (err error) {
|
|
// 创建下载目录
|
|
// 创建下载目录
|
|
if err := os.MkdirAll(downloadDir, os.ModePerm); err != nil {
|
|
if err := os.MkdirAll(downloadDir, os.ModePerm); err != nil {
|
|
fmt.Printf("创建下载目录时出错: %v\n", err)
|
|
fmt.Printf("创建下载目录时出错: %v\n", err)
|
|
- return
|
|
|
|
|
|
+ return nil
|
|
}
|
|
}
|
|
|
|
|
|
// 创建 chromedp 执行上下文
|
|
// 创建 chromedp 执行上下文
|
|
@@ -192,7 +179,7 @@ func main() {
|
|
// 启动 Chrome 实例
|
|
// 启动 Chrome 实例
|
|
if err := chromedp.Run(ctx); err != nil {
|
|
if err := chromedp.Run(ctx); err != nil {
|
|
fmt.Printf("启动 Chrome 实例时出错: %v\n", err)
|
|
fmt.Printf("启动 Chrome 实例时出错: %v\n", err)
|
|
- return
|
|
|
|
|
|
+ return nil
|
|
}
|
|
}
|
|
|
|
|
|
// 设置下载行为
|
|
// 设置下载行为
|
|
@@ -204,19 +191,21 @@ func main() {
|
|
// 登录操作
|
|
// 登录操作
|
|
if err := login(ctx); err != nil {
|
|
if err := login(ctx); err != nil {
|
|
fmt.Printf("登录错误: %v\n", err)
|
|
fmt.Printf("登录错误: %v\n", err)
|
|
- return
|
|
|
|
|
|
+ return nil
|
|
}
|
|
}
|
|
|
|
|
|
// 下载数据
|
|
// 下载数据
|
|
if err := downloadData(ctx); err != nil {
|
|
if err := downloadData(ctx); err != nil {
|
|
fmt.Printf("数据下载错误: %v\n", err)
|
|
fmt.Printf("数据下载错误: %v\n", err)
|
|
- return
|
|
|
|
|
|
+ return nil
|
|
}
|
|
}
|
|
|
|
|
|
fmt.Println("数据下载完成")
|
|
fmt.Println("数据下载完成")
|
|
|
|
|
|
// 解析表格 读取数据
|
|
// 解析表格 读取数据
|
|
fileResolver()
|
|
fileResolver()
|
|
|
|
+
|
|
|
|
+ return nil
|
|
}
|
|
}
|
|
|
|
|
|
// 解析本地文件
|
|
// 解析本地文件
|