函数及其选择器来选择如何导出 CSV
Function and its selector to choose how to export CSV
这是用户选择导出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()
做类似的事情。第二个是:我想选择的第二个选项的正确选择器是什么?
page.click()
是正确的,如果你想遵循link。 page.select()
用于 select 在 select 框中输入值。
关于您的查询select或者,您缺少右括号和引号。它应该像这样工作:
page.click('a[href$="/admin/order?_export_=page%3A1"]')
确保在单击 link 之前单击下拉按钮:
await page.click('.btn-twitter.dropdown-toggle');
然后,一旦 link 可见,您可以使用以下选择器单击它:
await page.click('a[href$="/admin/order?_export_=page%3A1"]');
如果元素是动态生成的,您可能需要使用page.waitForSelector()
等待元素添加到DOM:
await page.waitForSelector('a[href$="/admin/order?_export_=page%3A1"]');
这是用户选择导出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()
做类似的事情。第二个是:我想选择的第二个选项的正确选择器是什么?
page.click()
是正确的,如果你想遵循link。 page.select()
用于 select 在 select 框中输入值。
关于您的查询select或者,您缺少右括号和引号。它应该像这样工作:
page.click('a[href$="/admin/order?_export_=page%3A1"]')
确保在单击 link 之前单击下拉按钮:
await page.click('.btn-twitter.dropdown-toggle');
然后,一旦 link 可见,您可以使用以下选择器单击它:
await page.click('a[href$="/admin/order?_export_=page%3A1"]');
如果元素是动态生成的,您可能需要使用page.waitForSelector()
等待元素添加到DOM:
await page.waitForSelector('a[href$="/admin/order?_export_=page%3A1"]');