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);
}
}
}
}
この記事が気に入ったらサポートをしてみませんか?