Динамическая очистка веб-страниц с помощью C#
Я пытаюсь очистить веб-страницу с помощью C# и использую HtmlAgilityPack, она хорошо работает для меня, но у меня возникла проблема с этим веб-сайтом, когда мне нужно очистить данные с другой страницы списка продуктов. Поскольку ссылка не имеет номера страницы, поэтому я не могу получить к ней доступ, изменив ссылку. Я обнаружил, что страница изменяется с помощью функции javascript "__doPostBack", которая не меняет ссылку, просто перезагружает страницу и загружает данные. Это мой код для очистки кода и цены продукта на этом веб-сайте, однако на другой странице есть другие продукты, например, 2, 3, 4, 5... Мне нужно собрать данные со всех этих страниц. На других сайтах я могу просто передать ссылку на web.Load("Ссылка"); и это работает хорошо, потому что ссылка меняется при смене страницы списка товаров. В этом примере ссылка не изменяется при выборе другой страницы списка.
public class CodeAndPrice
{
public string Code { get; set; }
public string Price { get; set; }
}
public partial class Form1 : Form
{
DataTable table;
HtmlWeb web = new HtmlWeb();
public Form1()
{
InitializeComponent();
InitTable();
}
private void InitTable()
{
table = new DataTable("DataTableTest");
table.Columns.Add("Code", typeof(string));
table.Columns.Add("Price", typeof(string));
dataGridView.DataSource = table;
}
private async Task<List<CodeAndPrice>> DataScraping (){
var page = await Task.Factory.StartNew(() => web.Load("https://www.kilobaitas.lt/Kompiuteriai/Plansetiniai_(Tablet)/CatalogStore.aspx?CatID=PL_626"));
var codesNodes = page.DocumentNode.SelectNodes("//td[@class='mainContent']//div[@class='itemNormal']//div[@class='itemCode']");
var pricesNodes = page.DocumentNode.SelectNodes("//td[@class='mainContent']//div[@class='itemNormal']//div[@class='itemCode']//parent::div//div[@class='itemBoxPrice']");
if (codesNodes == null || pricesNodes == null)
return new List<CodeAndPrice>();
var codes = codesNodes.Select(node => node.InnerText.Replace("kodas", "").Replace(" ", "").Replace(": ", ""));
var prices = pricesNodes.Select(node => node.InnerText.Replace(" ", "").Replace(" €", ""));
return codes.Zip(prices, (code,price)=> new CodeAndPrice() { Code = code, Price = price }).ToList();
}
private async void Form1_Load(object sender, EventArgs e)
{
var results = await DataScraping();
foreach (var rez in results) {
table.Rows.Add(rez.Code, rez.Price);
}
}
}
Передача __doPostBack('designer1$ctl11$ctl00$MainCatalogSquare1$XDataPaging1','paging.1'); в консоль браузера загружается страница 2, изменяя "paging.*", браузер загружает страницу *+1
Как проще всего манипулировать javascript, когда я смогу менять страницу при очистке данных и очистке данных с других страниц этого сайта?