dags att checka in
This commit is contained in:
87
PuppeteerSharpTest/Form1.cs
Normal file
87
PuppeteerSharpTest/Form1.cs
Normal file
@ -0,0 +1,87 @@
|
||||
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<DtoEst> 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<string>($"()=>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<string>("()=>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<string>("()=>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);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user