在浏览器开发工具中看到的页面元素不会被 ChromeHeadless 检索
Page elements seen in the browser dev tools are not retrieved by ChromeHeadless
本页内容:
我可以看到带有“添加到购物车”文本的按钮,我也可以在开发工具中看到它。
但是,当 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
本页内容:
我可以看到带有“添加到购物车”文本的按钮,我也可以在开发工具中看到它。
但是,当 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