Функция и ее селектор для выбора способа экспорта CSV - PullRequest
0 голосов
/ 28 октября 2018

Вот исходный код на странице, который пользователь может выбрать для экспорта файла CSV.

<div class="btn-group pull-right" style="margin-right: 10px">
    <a class="btn btn-sm btn-twitter"><i class="fa fa-download"></i> 导出</a>
    <button type="button" class="btn btn-sm btn-twitter dropdown-toggle" data-toggle="dropdown">
        <span class="caret"></span>
        <span class="sr-only">Toggle Dropdown</span>
    </button>
    <ul class="dropdown-menu" role="menu">
        <li><a href="/admin/order?_export_=all" target="_blank">全部</a></li>
        <li><a href="/admin/order?_export_=page%3A1" target="_blank">当前页</a></li>
        <li><a href="/admin/order?_export_=selected%3A__rows__" target="_blank" class='export-selected'>选择的行</a></li>
    </ul>
</div>

Цель кода - выбрать 当前页 из 3 вариантов и запуститьсобытие экспорта.Вот фрагмент кода для экспорта CSV:

await page._client.send('Page.setDownloadBehavior', {behavior: 'allow', 
         downloadPath: '/tmp'})
res = await Promise.all([
      page.waitForNavigation({waitUntil: 'load', timeout: 60000}),
      page.click('a[href$="/admin/order?_export_=page%3A1"]'),      
    ]);

Ошибка:

Error: No node found for selector: a[href$="/admin/order?_export_=page%3A1"]
at assert (C:\node_modules\puppeteer\lib\helper.js:259:11)
at Frame.click (C:\node_modules\puppeteer\lib\FrameManager.js:704:5)
at <anonymous>

Здесь есть 2 вопроса.Первый: page.click() подходит для этой цели?Существует page.select(), который делает то же самое.Второе: какой правильный выбор для 2-х вариантов я бы хотел выбрать?

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Убедитесь, что вы нажимаете кнопку раскрывающегося списка, прежде чем перейти по ссылке:

await page.click('.btn-twitter.dropdown-toggle');

Затем, когда ссылка станет видимой, вы можете щелкнуть по ней с помощью следующего селектора:

await page.click('a[href$="/admin/order?_export_=page%3A1"]');

Возможно, вам придется использовать page.waitForSelector() для ожидания добавления элемента в DOM, если элемент генерируется динамически:

await page.waitForSelector('a[href$="/admin/order?_export_=page%3A1"]');
0 голосов
/ 28 октября 2018

page.click() правильно, если вы хотите перейти по ссылке.page.select() - для выбора значения в поле выбора.

Что касается вашего селектора запросов, то вам не хватает закрывающей скобки и кавычек.Это должно работать так:

page.click('a[href$="/admin/order?_export_=page%3A1"]')
...