无法点击具有特定属性的按钮

时间:2019-05-09 15:49:07

标签: c# xpath web-scraping puppeteer puppeteer-sharp

我正在使用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-username1login-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:无法在'Document'上执行'querySelector':'name = login-submit'不是有效的选择器。       在 puppeteer_evaluation_script :1:33'

此错误发生在

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

方法ClickAsync需要一个选择器,而按钮仅具有唯一的name,看来我还是无法单击该按钮。

NB:Browser变量的实例如下:

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

2 个答案:

答案 0 :(得分:1)

"name=login-submit"不是有效的CSS Selector。这应该为您工作:

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

答案 1 :(得分:1)

如果您使用CSS selector作为定位器,则说明您没有提供正确的定位器。

您可以尝试使用应该起作用的CSS选择器。

使用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']");