无法在Puppeteer中选择每页选项

时间:2018-10-29 05:02:03

标签: puppeteer

有类似的question发布,我对一个非常相似的案例应用了相同的技术。但是该解决方案对我不起作用,我也不知道是什么导致了错误。

这里是每个选择的html source code

<label class="control-label pull-right" style="margin-right: 10px; font-weight: 100;">

        <small>显示</small>&nbsp;
        <select class="input-sm grid-per-pager" name="per-page">
            <option value="https://www.mysite-com/admin/order?per_page=10" >10</option>
<option value="https://www.mysite-com/admin/order?per_page=20" selected>20</option>
<option value="https://www.mysite-com/admin/order?per_page=30" >30</option>
<option value="https://www.mysite-com/admin/order?per_page=50" >50</option>
<option value="https://www.mysite-com/admin/order?per_page=100" >100</option>
        </select>
        &nbsp;<small>条</small>
    </label>

由于此处的select不是本机HTML元素,而是bootstrap元素,因此我选择使用page.click。该代码应执行以下操作:1)单击select元素,并使选项可供选择,以及2)选择每页100个。这是我的代码:

  res = await Promise.all([
    page.waitForNavigation({waitUntil: 'load', timeout: 60000}),
    page.click('select[name="per-page"]'),  //<=== causing error
  ]);
  res = await Promise.all([
    page.waitForNavigation({waitUntil: 'load', timeout: 60000}),
    page.click('select[name="per-page"] > option:nth-child(5)'),
  ]);

错误是:

Error: No node found for selector: select[name="per-page"]
    at assert (C:\d\code\js\wbot\node_modules\puppeteer\lib\helper.js:259:11)
    at Frame.click (C:\d\code\js\wbot\node_modules\puppeteer\lib\FrameManager.js:704:5)
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:189:7)  

尝试了不同的选择器,例如

select.input-sm[name="per-page"]  
select.input-sm.grid-per-pager

但是它们都不起作用。选择器对我来说似乎正确,但是找不到元素。还尝试了page.select,但效果不佳。我在这里想念什么?

1 个答案:

答案 0 :(得分:0)

   <appSettings>
        <add key="MyConnectionSettings" value="Server=127.0.0.1;Port=3306;Database=myDataBase;Uid=root or user;
    Pwd=yourpassword" />


string connectionFromConfig = ConfigurationManager.AppSettings["MyConnectionSettings"];
using(MySqlConnection con = new MySqlConnection(connectionFromConfig)){
con.Open();
   string sql = "SELECT *from yourtable";
 MySqlCommand cmd = new MySqlCommand(sql, con );
        MySqlDataReader rdr = cmd.ExecuteReader();

        while (rdr.Read())
        {
            Console.WriteLine(rdr[0]+" -- "+rdr[1]);
        }
        rdr.Close();
}

等待元素出现,然后再选择。