我尝试通过类名删除元素,但没有效果。
这是我使用的代码:
await page.screenshot({path: 'pic.png'}); //for testing purposes
let div_selector_to_remove= ".xj7.Kwh5n";
var thingToRemove = document.querySelectorAll(div_selector_to_remove);
var number_of_elements = thingToRemove.length;
for (var i = 0; i < number_of_elements.length; i++) {
thingToRemove[i].parentNode.removeChild(thingToRemove);
}
浏览器加载后,我得到了一个加载了元素的屏幕截图。什么都没有发生。元素仍然在那里
4条答案
按热度按时间lmyy7pcs1#
在
page.evaluate
中运行document.querySelector
,答案如下:xeufq47z2#
可能更容易...
删除与
selector
匹配的第一个节点:删除与
selector
匹配的所有节点:如果出于某种原因,您需要在控制台浏览器中选择并删除:
您也可以将选择器硬编码到
eval
字符串/函数中,但我认为为了以防万一,以两种不同的方式显示它来自变量会很有用。与Puppeteer中的任何东西一样,了解哪些代码在Node/Puppeteer-land中运行,哪些代码在浏览器/控制台-land中运行是非常重要的。如果它是回调函数或者字符串化函数体,那么它就在浏览器中,你只能使用浏览器/DOM的概念,比如
HTMLElement.remove()
,window
和document
,否则它就在Node中运行,你只能调用Puppeteer API函数。在OP的例子中,看起来我们在Node-land的回调函数之外,所以document
不是一个东西,只有Puppeteerpage.
函数。laawzig23#
首先,
number_of_elements
是数字。但是你叫
number_of_elements.length
。接下来,
thingToRemove[i].parentNode.removeChild(thingToRemove)
,thingToRemove[i].parentNode
是thingToRemove[i]
的父节点,而不是thingToRemove
,所以不能从
thingToRemove[i].parentNode
中删除thingToRemove
。我想这个代码可能有用。
2admgd594#