Невозможно нажать на кнопку с определенным атрибутом - PullRequest
0 голосов
/ 09 мая 2019

Я использую puppeteer-sharp для получения контента, загружаемого AJAX с веб-страницы. Мне нужно отправить форму, которая имеет следующую структуру:

<form action="" method="post" _lpchecked="1">
    <div class="item">
        <div class="title"><label for="login-username1">Username</label></div>
        <div>
            <input class="int-text" type="text" id="login-username1" name="login-username" value="" size="25" autocomplete="off" >
            <span class="required" title="required item">*</span>
        </div>
    </div>
    <div class="item">
        <div class="title"><label for="login-password1">Password</label></div>
        <div>
            <input class="int-text" type="password" id="login-password1" name="login-password" size="25" autocomplete="off">
            <span class="required" title="required item">*</span>
        </div>
    </div>
    <div class="item">
        <button type="submit" name="login-submit" class="inline-btn-2"><span><span>Login</span></span></button>
    </div>
</form>

Сначала я заполнил два доступных ввода: login-username1 и login-password1, используя следующий код:

using (Page page = await Browser.NewPageAsync())
{
    await page.GoToAsync("https://www.oddsportal.com/login/");
    await page.TypeAsync("#login-username1", "sfarzoso");
    await page.TypeAsync("#login-password1", "password");

    await page.ClickAsync("name=login-submit");
    await page.WaitForNavigationAsync();
    var c = await page.GetContentAsync();
}

проблема в том, что кнопка не имеет id, а только атрибут name, поэтому мой код возвращает:

PuppeteerSharp.EvaluationFailedException: «Оценка не выполнена: DOMException: не удалось выполнить« querySelector »для« Документа »:« name = login-submit »не является допустимым селектором. в puppeteer_evaluation_script : 1: 33 '

эта ошибка произошла на

await page.ClickAsync("name=login-submit");

метод ClickAsync хочет селектор, а у кнопки просто есть уникальный name, кажется, что я не могу нажать на эту кнопку, хотя.

Примечание: Browser переменная создается следующим образом:

Browser = await Puppeteer.LaunchAsync(new LaunchOptions
{
    Headless = true,
    ExecutablePath = Environment.GetEnvironmentVariable("CHROME_PATH"),
});

Ответы [ 2 ]

1 голос
/ 09 мая 2019

Если вы используете CSS selector в качестве локатора, значит, вы не указали правильный локатор.

Вы можете попробовать следующий CSS Selector, который должен работать.

Использование атрибута Type

await page.ClickAsync("button[type='submit']");

ИЛИ Использование атрибута name

 await page.ClickAsync("button[name='login-submit']");

ИЛИ использование атрибута class

await page.ClickAsync("button.inline-btn-2");

ИЛИ Использование multiple attribute, например

await page.ClickAsync("button[type='submit'][name='login-submit']");
1 голос
/ 09 мая 2019

"name=login-submit" не является допустимым CSS Selector .Это должно работать для вас:

await page.ClickAsync("button[name='login-submit']");
...