【发布时间】:2022-01-09 21:35:26
【问题描述】:
我想使用 Puppeteer 在下面的搜索栏中进行搜索。但是我看不到任何我可以用来识别搜索栏的东西。
如果我这样做:
await page.type('[id="i0e792821-542f-11ec-9366-f3e8261f9ecb"]', 'test="1 2" and test2="3 4"');
await page.type('["data-test-subj"="queryInput"]', 'test="1 2" and test2="3 4"');
await page.type('[class=".euiTextArea.euiTextArea--resizeVertical.euiTextArea--fullWidth.kbnQueryBar__textarea.kbnQueryBar__textarea--hasPrepend.kbnQueryBar__textarea--hasAppend"]', 'test="1 2" and test2="3 4"');
await page.type("*[role='search']", 'test="1 2" and test2="3 4"');
那么前 3 个给:
Error: No node found for selector:
最后一个没有任何错误。
如果我这样做:
await page.waitForSelector('i0e792821-542f-11ec-9366-f3e8261f9ecb');
await page.focus('i0e792821-542f-11ec-9366-f3e8261f9ecb');
await page.focus('i0e792821-542f-11ec-9366-f3e8261f9ecb', '1234', {delay: 1500});
我明白了:
TimeoutError: waiting for selector `i0e792821-542f-11ec-9366-f3e8261f9ecb` failed: timeout 30000ms exceeded
我可以用什么来填写搜索栏中的文字?
【问题讨论】:
-
如果元素每次都具有相同的嵌套布局,也许您可以尝试遍历元素?
div > div[class=foo] > div > textarea -
元素上有一个特定的
data-test-属性,您不使用它有什么原因吗?您还可以通过占位符或标签属性来选择它,这更能反映最终用户如何找到它。 -
您的前三个尝试都不能引发错误
Error: No node found for selector: *[id='#i0e792821-542f-11ec-9366-f3e8261f9ecb']。您能否确保此错误文本与实际抛出的内容准确无误...? -
page.waitForSelector('i0e792821-542f-11ec-9366-f3e8261f9ecb');你的意思是在前面加上一个#标记来表明你正在等待这个值的ID吗?
标签: javascript html css node.js puppeteer