alpdurden
Kodunuzun sorunu, muhtemelen HTML yapısının tam olarak beklendiği gibi olmamasından veya elementlerin yüklenmesi için yeterli zaman verilmemesinden kaynaklanıyor olabilir. Ayrıca, durakları çekerken XPath ifadelerinin doğru olmaması da bir sorun olabilir.
Aşağıda, durakları doğru bir şekilde çekmek için düzeltilmiş ve iyileştirilmiş bir kod örneği sunuyorum:
using System;
using System.Collections.Generic;
using System.Linq;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using HtmlAgilityPack;
using System.Threading;
class Program
{
static void Main()
{
var chromeOptions = new ChromeOptions();
chromeOptions.AddArgument("--ignore-certificate-errors");
chromeOptions.AddArgument("--ignore-ssl-errors");
using (var driver = new ChromeDriver(chromeOptions))
{
driver.Navigate().GoToUrl("https://moovitapp.com/index/tr/toplu_taşıma-lines-Ankara-1723-1202577");
Thread.Sleep(10000); // Sayfanın yüklenmesi için bekleme süresi
var busLines = driver.FindElements(By.CssSelector("li.line-item.line-data.mobile-line")).Take(2);
List<string> lineNames = new List<string>();
foreach (var line in busLines)
{
try
{
var lineNameElement = line.FindElement(By.CssSelector("div.line-name"));
var lineName = lineNameElement.Text;
lineNames.Add(lineName);
lineNameElement.Click();
Thread.Sleep(5000); // Sayfanın yüklenmesi için bekleme süresi
var htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(driver.PageSource);
var stops = htmlDoc.DocumentNode.SelectNodes("//li[contains(@class, 'line-item-data stop')]");
if (stops != null)
{
foreach (var stop in stops.Take(5)) // İlk 5 durağı çekme
{
var stopName = stop.SelectSingleNode(".//span[contains(@class, 'name')]").InnerText;
Console.WriteLine($"Hat: {lineName}, Durak: {stopName}");
}
}
driver.Navigate().Back();
Thread.Sleep(5000); // Sayfanın yüklenmesi için bekleme süresi
}
catch (Exception ex)
{
Console.WriteLine($"Error processing line: {ex.Message}");
}
}
driver.Quit();
}
}
}
Yukarıdaki kodda yapılan değişiklikler:
Thread.Sleep
süreleri artırıldı, böylece sayfaların ve elementlerin tamamen yüklenmesi için yeterli zaman sağlanmış oldu.
- XPath ifadeleri güncellendi ve durak isimlerini çekmek için
.//span[contains(@class, 'name')]
ifadesi kullanıldı.
- Hataların yakalanması ve işlenmesi için
try-catch
bloğu eklendi.
Bu kodu çalıştırarak, durak isimlerini de çekebilmeyi deneyebilirsiniz. Eğer hala sorun yaşıyorsanız, elementlerin sınıf isimlerinde veya XPath ifadelerinde değişiklikler yaparak denemeler yapmanız gerekebilir.