sele

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Support.UI;

namespace WindowsFormsApp5
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            // Chromeドライバーのパスを指定(ChromeDriver.exeのパスを設定してください)
            string chromeDriverPath = @"E:\chromedriver-win64\chromedriver-win64\chromedriver.exe";

            // Chrome WebDriverを初期化
            var chromeOptions = new ChromeOptions();
            //chromeOptions.AddArgument("--headless"); // ヘッドレスモードで実行(任意)

            // 出力ファイルのパスを指定
            string outputFilePath = "output.txt";
            string outputFilePath2 = "output2.txt";

            ChromeDriver driver = new ChromeDriver(chromeDriverPath, chromeOptions);

            
            try
            {
                // Webページにアクセス
                driver.Navigate().GoToUrl("");

                pagewait(driver);

                #region  マーケットニュースの取得
                // <div id="news-content">内のすべての<li>要素を取得
                var newsContent = driver.FindElement(By.Id("news-contents"));
                var liElements = newsContent.FindElements(By.TagName("li"));

                // データをカンマ区切りの文字列に成形
                StringBuilder csvData = new StringBuilder(outputFilePath);

                using (StreamWriter writer = new StreamWriter(outputFilePath))
                {
                    foreach (var liElement in liElements)
                    {
                        var aElement = liElement.FindElement(By.TagName("a"));
                        string liText = liElement.Text;
                        string aText = aElement.Text;
                        string aHref = aElement.GetAttribute("href");

                        // カンマ区切りの文字列をファイルに書き込む
                        writer.WriteLine($"{liText},{aText},{aHref}");
                    }
                }

                Console.WriteLine($"データを {outputFilePath} に書き込みました。");
                #endregion 

                #region  お知らせ取得
                // XPathを使用してフルパスで要素を特定
                string xpath = "/html/body/div[2]/div[5]/div[2]/div[1]/div[4]/div[2]/h2/a";
                var element = driver.FindElement(By.XPath(xpath));

                // 要素をクリック
                element.Click();

                pagewait(driver);

                // <div id="news-content">内のすべての<li>要素を取得
                var newsContent2 = driver.FindElement(By.Id("news-group-contents"));
                var liElements2 = newsContent2.FindElements(By.TagName("li"));

                // データをカンマ区切りの文字列に成形
                csvData = new StringBuilder(outputFilePath2);

                // タイムアウトと待機の設定
                var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); // 最大10秒まで待機する設定

                using (StreamWriter writer = new StreamWriter(outputFilePath2))
                {
                    foreach (var liElement in liElements2)
                    {
                        // <span class="news-list-title">要素を取得
                        var titleElement = wait.Until(c => liElement.FindElement(By.CssSelector("span.news-list-title")));

                        // WebDriverWaitを使用して、<span class="char-limit">要素が利用可能になるまで待機
                        var charLimitElement = wait.Until(d => titleElement.FindElement(By.CssSelector("span.char-limit")));

                        // <span>要素内のテキストを取得
                        string titleText = charLimitElement.Text;

                        var aElement = liElement.FindElement(By.TagName("a"));
                        string liText = liElement.Text;
                        string aText = aElement.Text;
                        string aHref = aElement.GetAttribute("href");

                        // カンマ区切りの文字列をファイルに書き込む
                        writer.WriteLine($"{liText},{aText},{aHref}");
                    }
                }

                Console.WriteLine($"データを {outputFilePath} に書き込みました。");

                #endregion 


            }
            finally
            {
                // WebDriverをクローズ
                driver.Quit();
            }

        }

        private void button2_Click(object sender, EventArgs e)
        {
            // Chromeドライバーのパスを指定(ChromeDriver.exeのパスを設定してください)
            string chromeDriverPath = @"E:\chromedriver-win64\chromedriver-win64\chromedriver.exe";

            // Chrome WebDriverを初期化
            var chromeOptions = new ChromeOptions();
            //chromeOptions.AddArgument("--headless"); // ヘッドレスモードで実行(任意)

            IWebDriver driver = new ChromeDriver(chromeDriverPath, chromeOptions);

            try
            {
                // Webページにアクセス
                driver.Navigate().GoToUrl("https:///");

                // XPathを使用してフルパスで要素を特定
                string xpath = "/html/body/div[2]/div[5]/div[2]/div[1]/div[4]/div[2]/h2/a";
                var element = driver.FindElement(By.XPath(xpath));

                // 要素をクリック
                element.Click();

                // クリック後の処理を追加できます
                // 例: クリック後に新しいページが読み込まれる場合、そのページでの操作を実行できます
            }
            finally
            {
                // WebDriverをクローズ
                driver.Quit();
            }
        }

        static void pagewait(ChromeDriver chro)
        {
            //</html>を見つけるまで待機
            try
            {
                WebDriverWait wait = new WebDriverWait(chro, TimeSpan.FromSeconds(0.01));
                IWebElement firstResult = wait.Until(e => e.FindElement(By.XPath("/html")));

            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

        }
    }
}

この記事が気に入ったらサポートをしてみませんか?