using PuppeteerSharp; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Globalization; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace PuppeteerSharpTest { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private async void btnScrape_Click(object sender, EventArgs e) { var result = await LoadXXXAsync(); } private async Task LoadXXXAsync() { // downloads chromium to the local project, needed by Puppeteer Sharp for execution, takes about 2 min! await new BrowserFetcher().DownloadAsync(); // await new BrowserFetcher().DownloadAsync(DefaultChromiumRevision); DtoEst dto = new DtoEst(); //var url = "https://www.xxxxxx.xhtml"; var url = "https://www.bmf-steuerrechner.de/ekst/eingabeformekst.xhtml"; #region SELECTORS // https://stackoverflow.com/questions/45110893/select-elements-by-attributes-with-colon // use css escapes: https://mothereff.in/css-escapes string id_checkbox_IsMarried = "bmf_form_ekst:ekst_pv:0"; string id_input_Umsatz = "bmf_form_ekst:ekst_zve"; string id_button_Submit2 = @"#bmf_form_ekst\3A income_ekst"; string NettoUmsatz = txtNettoUmsatz.Text; #endregion //// This statement downloads and installs chromium //await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision); var browser = await Puppeteer.LaunchAsync(new LaunchOptions { Headless = true }); using (var page = await browser.NewPageAsync()) { // load page await page.GoToAsync(url); // wait for element to be there await page.WaitForExpressionAsync($"document.getElementById('{id_input_Umsatz}')!=null"); await page.EvaluateExpressionAsync($"document.getElementById('{id_input_Umsatz}').value = '{NettoUmsatz}';"); // get element value var val = await page.EvaluateFunctionAsync($"()=>document.getElementById('{id_input_Umsatz}').value"); // wait for element to be there await page.WaitForExpressionAsync($"document.getElementById('{id_checkbox_IsMarried}')!=null"); await page.EvaluateExpressionAsync($"document.getElementById('{id_checkbox_IsMarried}').checked = false;"); await page.ClickAsync(id_button_Submit2); // wait for redirect await page.WaitForNavigationAsync(); // get value from element var strValueEst = await page.EvaluateFunctionAsync("()=>document.querySelector('#ui-id-4 > div.ekst_ergebnis > div:nth-child(6) > table > tbody > tr:nth-child(3) > td:nth-child(2) > strong').textContent"); // get value from element var strValueEstPercent = await page.EvaluateFunctionAsync("()=>document.querySelector('#ui-id-4 > div.ekst_ergebnis > div:nth-child(6) > table > tbody > tr:nth-child(3) > td:nth-child(3) > strong').textContent"); var deDE = new CultureInfo("de-DE"); Decimal.TryParse(strValueEst.TrimEnd(" Euro".ToCharArray()), NumberStyles.AllowThousands | NumberStyles.AllowDecimalPoint, deDE, out var decValueEst); Decimal.TryParse(strValueEstPercent.TrimEnd(" %".ToCharArray()), NumberStyles.AllowThousands | NumberStyles.AllowDecimalPoint, deDE, out var decValueEstPercent); dto.EstBetrag = decValueEst; dto.EstProzentsatz = decValueEstPercent; } return await Task.FromResult(dto); } } }