Stack Overflow на русском Asked by FaNaT_96 on November 24, 2021
Недавно подключил в проект geckofx 60 вместо webbrowser, т.к. он совсем перестал адекватно работать с JS.
На сайте есть форма с разнообразными полями, в том числе и полем типа file. Мне нужно вставить в него файл, находящийся в папке на локальном диске. Я чуть-чуть поправил под gecko метод, который использовал в webbrowser, тоже предварительно найденный в этой теме
//Вставляем торрент
async Task PopulateInputFile(GeckoHtmlElement file)
{
file.Focus();
string a = Properties.Settings.Default.diskString;
// delay the execution of SendKey to let the Choose File dialog show up
var sendKeyTask = Task.Delay(500).ContinueWith((_) =>
{
// this gets executed when the dialog is visible
SendKeys.Send(a + getTorrent + "{ENTER}");
}, TaskScheduler.FromCurrentSynchronizationContext());
file.Click(); // this shows up the dialog
await sendKeyTask;
// delay continuation to let the Choose File dialog hide
await Task.Delay(500);
}
//вставляем постер
async Task PopulateInputFile_poster(GeckoHtmlElement file_poster)
{
file_poster.Focus();
// delay the execution of SendKey to let the Choose File dialog show up
var sendKeyTask = Task.Delay(500).ContinueWith((_) =>
{
// this gets executed when the dialog is visible
SendKeys.Send(Properties.Settings.Default.diskString + "poster.jpg" + "{ENTER}");
}, TaskScheduler.FromCurrentSynchronizationContext());
file_poster.Click(); // this shows up the dialog
await sendKeyTask;
// delay continuation to let the Choose File dialog hide
await Task.Delay(500);
}
}
async Task Populate()
{
var elements = geckoWebBrowser1.Document.GetElementsByTagName("input");
// торрент
foreach (GeckoHtmlElement file in elements)
{
if (file.GetAttribute("name") == "file")
{
file.Focus();
await PopulateInputFile(file);
}
}
//постер
foreach (GeckoHtmlElement file_poster in elements)
{
if (file_poster.GetAttribute("name") == "screen")
{
file_poster.Focus();
await PopulateInputFile_poster(file_poster);
}
}
}
Вызываю так:
Populate().ContinueWith((_) =>
{
}, TaskScheduler.FromCurrentSynchronizationContext());
И если в webbrowser он работал без каких-либо нареканий, то здесь есть проблема с тем, что он не всегда фиксирует нажатие клавиши enter, в результате чего диалоговое окно остается висеть, а остальные появляются поверх него. Можно конечно, просто потом вручную нажать enter, но хотелось бы довести весь функционал до автоматизма. Отмечу, что иногда срабатывает все как надо и все поля на форме заполняются. Но это происходит редко. Чаще заполняется поле с торрентом, а остальные уже как когда.
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP