我正在使用 Selenium 和 OpenWPM 来抓取网页并与网页交互。在某些网站上,所有元素似乎都已成功加载,但是当我尝试抓取特定元素(具有特定属性)并执行单击时,指令会导致超时。
以下是一些观察结果:
元素是动态生成的,它们的类是非静态的(即它们在每次页面加载时都会改变)。 尽管页面在视觉上看起来已完全加载,但尝试使用其属性来定位元素会导致长时间延迟或超时。 我怀疑这可能是由于某些动态行为或故意混淆以破坏自动化工具造成的。 我尝试了以下方法,但都没有完全解决问题:
将 WebDriverWait 与 Presence_of_element_ located 结合使用,以确保元素在与其交互之前已加载。 尝试通过替代属性或 XPath 来定位元素。 尝试通过 JavaScript 直接与元素交互。
问题: 网站使用什么技术使元素以这种方式动态生成,从而导致自动化工具超时? 如何有效地处理这种行为并与具有非静态属性的元素交互?
任何调试此问题的建议、见解或建议将不胜感激!
您可以按照以下步骤操作:
将 WebDriverWait 与预期条件(例如,元素可见性、可点击元素或自定义条件)结合使用来处理动态延迟。
避免依赖非静态的类名或 ID。 根据属性或父子关系的独特组合使用 XPath 或 CSS 选择器。
使用execute_script 或Python 中的requests 等库等待特定的JavaScript 变量或网络请求完成。
如果标准 Selenium 方法失败,请使用execute_script 直接操作元素或与元素交互。
如果元素位于影子 DOM 内,请使用 Selenium 的影子 DOM 支持或execute_script 来访问它们。
使用突变观察器或轮询循环等待特定的 DOM 更改或元素状态。