在浏览器开发工具中看到的页面元素不会被 ChromeHeadless 检索

Page elements seen in the browser dev tools are not retrieved by ChromeHeadless

本页内容:

https://www.bedbathandbeyond.com/store/product/o-o-by-olivia-oliver-turkish-modal-bath-towel-collection/5469128?categoryId=13434

我可以看到带有“添加到购物车”文本的按钮,我也可以在开发工具中看到它。

但是,当 ChromeHeadless 使用 selenium 检索到相同的页面源并且我的脚本搜索它时,此文本不存在。

我尝试在浏览器中选择显示页面源,源也没有“添加到购物车文本”

此外,我使用 curl 获取页面,“添加到购物车”也不在返回的页面源中。

我做错了什么?

页面是否隐藏了按钮?

我如何检查它是否存在,以检查产品可用性?

您要查找的元素在阴影内DOM。您需要先访问影子根目录。如果不经过反复试验,很难确切地看到 DOM 中发生了什么,但像这样:

WebElement shadowHost = driver.findElement(By.cssSelector("#wmHostPdp"));
SearchContext shadowRoot = shadowHost.getShadowRoot();
WebElement addToCart = shadowRoot.findElement(By.cssSelector(".shipItBtnCont button"));

有关 Shadow DOM 和 Selenium 的更多信息 — https://titusfortner.com/2021/11/22/shadow-dom-selenium.html