|
@@ -6,7 +6,6 @@ import (
|
|
|
"eta/eta_data_analysis/models"
|
|
|
"eta/eta_data_analysis/utils"
|
|
|
"fmt"
|
|
|
- "github.com/chromedp/cdproto/cdp"
|
|
|
"github.com/xuri/excelize/v2"
|
|
|
"io"
|
|
|
"log"
|
|
@@ -21,11 +20,8 @@ import (
|
|
|
var (
|
|
|
downloadDir = utils.RZD_EXCEL_PATH
|
|
|
defaultDir = utils.RZD_DOWNLOAD_PATH
|
|
|
- rzdLoginPath = "https://clients.rystadenergy.com/clients/"
|
|
|
+ rzdLoginPath = "https://portal.rystadenergy.com/home"
|
|
|
rzdBatchSize = 500
|
|
|
-
|
|
|
- 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`
|
|
|
)
|
|
|
|
|
|
// 处理数据下载的步骤
|
|
@@ -34,41 +30,32 @@ func downloadData(ctx context.Context) error {
|
|
|
if err := chromedp.Run(ctx,
|
|
|
chromedp.Sleep(5*time.Second), // 考虑移除这一行,如果不必要的话
|
|
|
chromedp.Navigate(rzdLoginPath),
|
|
|
- chromedp.WaitVisible(`div.d-none.d-lg-flex.flex-grow-1`, chromedp.ByQuery),
|
|
|
- chromedp.Click(clientSearchLink, chromedp.ByQuery),
|
|
|
- chromedp.WaitVisible(`input[class="ais-SearchBox-input rounded border py-2 px-3 shadow-sm font-size-14 w-100"]`, chromedp.ByQuery),
|
|
|
- chromedp.SetValue(`input[class="ais-SearchBox-input rounded border py-2 px-3 shadow-sm font-size-14 w-100"]`, "oil demand signals weekly report", chromedp.ByQuery),
|
|
|
- chromedp.Sleep(10*time.Second),
|
|
|
- //chromedp.Click(`div.ais-InfiniteHits li a:has(img[src="/Static/img/icons/xls.png"])`, chromedp.ByQuery),
|
|
|
+ chromedp.WaitVisible(`a.mat-tooltip-trigger.analytics.home__link-card-icon[href="/analytics"]`, chromedp.ByQuery), // 等待元素可见
|
|
|
+ chromedp.Click(`a.mat-tooltip-trigger.analytics.home__link-card-icon[href="/analytics"]`, chromedp.ByQuery), // 点击链接
|
|
|
+ chromedp.Sleep(5*time.Second),
|
|
|
); err != nil {
|
|
|
return fmt.Errorf("下载 Analytics Library 数据错误: %v", err)
|
|
|
}
|
|
|
-
|
|
|
- xpath := `//div[@id='search-page-hits']//li//a[.//div//span[@class='align-middle' and text()='Data']]`
|
|
|
- var inputCount int
|
|
|
- var nodes []*cdp.Node // 使用 *cdp.Node
|
|
|
if err := chromedp.Run(ctx,
|
|
|
- chromedp.ActionFunc(func(ctx context.Context) error {
|
|
|
-
|
|
|
- // 获取匹配的节点
|
|
|
- if err := chromedp.Nodes(xpath, &nodes, chromedp.BySearch).Do(ctx); err != nil {
|
|
|
- return fmt.Errorf("检查节点失败: %v", err)
|
|
|
- }
|
|
|
-
|
|
|
- // 获取节点数量
|
|
|
- inputCount = len(nodes)
|
|
|
- fmt.Printf("找到 %d 个匹配的元素\n", inputCount)
|
|
|
+ chromedp.WaitVisible(`#intro-home-page-step1`, chromedp.ByID), // 等待 input 元素可见
|
|
|
+ chromedp.SetValue(`#intro-home-page-step1`, "oil demand signals weekly report", chromedp.ByID), // 设置值
|
|
|
+ chromedp.SendKeys(`#intro-home-page-step1`, "\u000D", chromedp.ByID), // 模拟按下回车键 (\u000D 是回车的 Unicode)
|
|
|
+ chromedp.Sleep(5*time.Second),
|
|
|
+ ); err != nil {
|
|
|
+ return fmt.Errorf("设置 input 标签值时发生错误: %v", err)
|
|
|
+ }
|
|
|
|
|
|
- if inputCount > 0 {
|
|
|
- // 点击第一个节点
|
|
|
- return chromedp.MouseClickNode(nodes[0]).Do(ctx) // 使用 []cdp.NodeID
|
|
|
- }
|
|
|
- return nil
|
|
|
- }),
|
|
|
- chromedp.Sleep(10*time.Second),
|
|
|
+ if err := chromedp.Run(ctx,
|
|
|
+ // 等待第一个 download-btns div 和下载按钮可见
|
|
|
+ chromedp.WaitVisible(`//div[contains(@class, 'download-btns')][1]//ul//li//button[contains(@class, 'mat-tooltip-trigger') and contains(@class, 'download__excel') and normalize-space(text())='Data']`, chromedp.BySearch),
|
|
|
+ // 点击第一个 div 中的 Excel 下载按钮
|
|
|
+ chromedp.Click(`//div[contains(@class, 'download-btns')][1]//ul//li//button[contains(@class, 'mat-tooltip-trigger') and contains(@class, 'download__excel') and normalize-space(text())='Data']`, chromedp.BySearch),
|
|
|
+ // 可选:等待下载完成,可以调整等待时间
|
|
|
+ chromedp.Sleep(5*time.Second), // 根据下载时间设置
|
|
|
); err != nil {
|
|
|
- return fmt.Errorf("下载 Analytics Library 数据错误: %v", err)
|
|
|
+ return fmt.Errorf("点击第一个下载按钮时发生错误: %v", err)
|
|
|
}
|
|
|
+
|
|
|
// 解析文件移动到目标目录
|
|
|
if err := waitAndRenameDownloadedFile("Oil_Demand_Signals_Weekly_Report_"+utils.GetCurrentYearMonth()+".xlsx", downloadDir); err != nil {
|
|
|
return err
|
|
@@ -150,6 +137,10 @@ func moveFile(source, destination string) error {
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
+func main() {
|
|
|
+ ResolverNet(context.Background())
|
|
|
+}
|
|
|
+
|
|
|
// 解析网页数据,下载文件
|
|
|
// func main() {
|
|
|
func ResolverNet(cont context.Context) (err error) {
|
|
@@ -409,8 +400,8 @@ func login(ctx context.Context) error {
|
|
|
chromedp.Sleep(5*time.Second),
|
|
|
|
|
|
// 等待并点击登录后页面的链接
|
|
|
- chromedp.WaitVisible(`a[href="/clients/"]`, chromedp.ByQuery), // 等待 Analytics Library 链接可见
|
|
|
- chromedp.Sleep(5*time.Second), // 等待页面加载完成
|
|
|
+ /*chromedp.WaitVisible(`a[href="/home"]`, chromedp.ByQuery), // 等待 Analytics Library 链接可见
|
|
|
+ chromedp.Sleep(5*time.Second), */ // 等待页面加载完成
|
|
|
)
|
|
|
}
|
|
|
|