Как заполнить форму внутри iframe с помощью Puppeteer-Sharp - PullRequest
1 голос
/ 07 ноября 2019

Я пытаюсь очистить сайт Taobao с помощью Puppeteer Sharp.

Вот код:

private static async Task SurfWithPuppeteer()
    {
        var options = new LaunchOptions{ Devtools  = true };

        Console.WriteLine("Downloading chromium");

        await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision);
        Console.WriteLine("Navigating to Hacker News");
        using (var browser = await Puppeteer.LaunchAsync(options))
        using (var page = await browser.NewPageAsync())
        {
            page.DefaultNavigationTimeout = 50000;
            await page.GoToAsync("https://login.tmall.com/?spm=875.7931836/B.a2226mz.1.66144265pHmhvt&redirectURL=https%3A%2F%2Fwww.tmall.com%2F");
            var frameElement= await page.QuerySelectorAsync("#J_loginIframe");
            //var frameElement = await page.QuerySelectorAsync("div#mallPage iframe");
            //var frameElement = await page.Frames.Select(f=>f.QuerySelectorAsync("#J_loginIframe")).FirstOrDefault();
            var frame = await frameElement.ContentFrameAsync();
            var frameContent = await frame.GetContentAsync();
            await frame.TypeAsync("#TPL_username_1", "compuwizpiyu");
            await frame.TypeAsync("#TPL_password_1", "Priyanka24$");
            var btn = await frame.QuerySelectorAsync("#J_SubmitStatic");

            await btn.ClickAsync();
            var res= await frame.WaitForNavigationAsync();
           var t=  await frame.GetContentAsync();
            //var url = page.Url;
        }
    }

Но я не могу перейти к фрейму, в котором есть форма входа (фреймне имеет имени, только src и id).

Я пытался проверить фреймы с помощью page.Frames, но, поскольку у фреймов нет имени, трудно найти нужный фрейм, который я ищу. Я пробовал несколько других вариантов, таких как:

var frameElement = await page.QuerySelectorAsync("div#mallPage iframe");
var frameElement = await page.Frames.Select(f=>f.QuerySelectorAsync("#J_loginIframe")).FirstOrDefault()

Но все еще не смог получить нужный кадр. Пожалуйста, помогите мне с тем, что здесь не так.

...