使用 webdriver 滚动到元素?

2025-02-24 09:29:00
admin
原创
61
摘要:问题描述:我仍在学习,并回答我的一个问题:在这里,我被告知这可能是由于所讨论的元素不在视图中。我查看了文档,所以,这里是最相关的答案:这里您可以使用“org.openqa.selenium.interactions.Actions”类移动到元素:WebElement element = driver.find...

问题描述:

我仍在学习,并回答我的一个问题:在这里,我被告知这可能是由于所讨论的元素不在视图中。

我查看了文档,所以,这里是最相关的答案:这里

您可以使用“org.openqa.selenium.interactions.Actions”类移动到元素:

WebElement element = driver.findElement(By.id("my-id"));
Actions actions = new Actions(driver);
actions.moveToElement(element);
## actions.click();
actions.perform();

当我尝试使用上述方法滚动到元素时:它说 WebElement 未定义。

我认为这是因为我没有导入相关模块。有人能指出我应该导入什么吗?

编辑:正如 alecxe 指出的那样,这是 java 代码。

但与此同时,经过一段时间的摸索,我找到了 WebElement 的导入方法:

from selenium.webdriver.remote.webelement import WebElement

可能会帮助像我这样的人。

在我看来,这也是一个很好的教训:

前往
:文档

class selenium.webdriver.remote.webelement.WebElement(parent, id_, w3c=False)

需要分离成上面提到的命令形式。


解决方案 1:

您正在尝试使用 Python 运行 Java 代码。在 Python/Selenium 中,它们org.openqa.selenium.interactions.Actions反映在ActionChains类中:

from selenium.webdriver.common.action_chains import ActionChains

element = driver.find_element_by_id("my-id")

actions = ActionChains(driver)
actions.move_to_element(element).perform()

或者,您也可以通过以下方式“滚动到视图” scrollIntoView()

driver.execute_script("arguments[0].scrollIntoView();", element)

如果您对差异感兴趣:

  • scrollIntoView 与 moveToElement

解决方案 2:

这不是问题的直接答案(它与无关Actions),但它也允许您轻松滚动到所需元素:

element = driver.find_element_by_id('some_id')
element.location_once_scrolled_into_view

这实际上是为了返回页面上元素的坐标(xy),但也向下滚动到目标元素

解决方案 3:

除此之外,move_to_element()scrollIntoView()还想提出以下代码,尝试将元素置于视图的中心:

desired_y = (element.size['height'] / 2) + element.location['y']
window_h = driver.execute_script('return window.innerHeight')
window_y = driver.execute_script('return window.pageYOffset')
current_y = (window_h / 2) + window_y
scroll_y_by = desired_y - current_y

driver.execute_script("window.scrollBy(0, arguments[0]);", scroll_y_by)

解决方案 4:

例子:

driver.execute_script("arguments[0].scrollIntoView();", driver.find_element_by_css_selector(.your_css_selector))

对于任何类型的选择器,这个对我来说总是有效的。还有 Actions 类,但对于这种情况,它不太可靠。

解决方案 5:

这可以使用 driver.execute_script() 来完成:-

driver.execute_script("document.getElementById('myelementid').scrollIntoView();")

解决方案 6:

这可能对任何到达这里的人都有帮助,因为这里顶部答案中的方法对我不起作用 -actions.move_to_element(element).perform()什么都没做,并且driver.execute_script("arguments[0].scrollIntoView();", element)滚动视图,因此元素被位于视图顶部的浮动菜单栏遮挡。对我有用的是使用scrollIntoView将其置于视图中心的选项,以确保它是可点击的:

driver.execute_script('arguments[0].scrollIntoView({block: "center", inline: "center"})', elem)

解决方案 7:

如果元素具有属性,则还有另一种选项可以将页面滚动到所需元素"id"

如果您想导航到页面并向下滚动到元素@id,则可以通过添加#element_id到 URL 自动完成...

例子

假设我们需要导航到 Selenium Waits 文档并向下滚动页面到“隐式等待”部分。我们可以这样做

driver.get('https://selenium-python.readthedocs.io/waits.html')

并添加滚动代码...或使用

driver.get('https://selenium-python.readthedocs.io/waits.html#implicit-waits')

导航至页面并自动滚动页面至元素id="implicit-waits"<div class="section" id="implicit-waits">...</div>

解决方案 8:

您可以通过该方法使用 javascript 滚动到元素execute_javascript。例如,下面是我在 Robot Framework 上使用 SeleniumLibrary 执行此操作的方法:

web_element = self.selib.find_element(locator)
self.selib.execute_javascript(
    "ARGUMENTS",
    web_element,
    "JAVASCRIPT",
    'arguments[0].scrollIntoView({behavior: "instant", block: "start", inline: "start"});'
)
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2772  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1702  
  在企业的产品研发与管理过程中,混合敏捷开发模式正逐渐成为主流。这种开发模式融合了多种开发方法的优势,旨在更高效地应对复杂多变的项目需求。而PLM项目管理平台作为企业产品全生命周期管理的重要工具,如何有效支持混合敏捷开发,成为众多企业关注的焦点。通过整合五大关键框架,PLM项目管理平台能够为混合敏捷开发提供强大的支撑,助...
PLM软件   5  
  PLM(产品生命周期管理)合规性审计在确保企业产品符合行业标准方面起着至关重要的作用。随着市场竞争的加剧和法规要求的日益严格,企业必须高度重视PLM合规性,通过有效的审计来保障产品从设计到报废的整个生命周期都能满足相关标准。本文将从流程、数据和人员三大维度深入探讨如何确保PLM合规性审计的有效实施,助力行业标准落地。流...
plm项目管理软件   5  
  PLM(产品生命周期管理)系统在现代企业的产品研发与管理中扮演着至关重要的角色。随着企业业务的不断拓展和产品的日益复杂,实现模块化开发成为提升PLM系统灵活性、可扩展性和维护性的关键。模块化开发能够将复杂的系统分解为多个相对独立、功能明确的模块,使得开发过程更加高效,不同模块之间的协同更加顺畅,也便于后续的升级与优化。...
国内plm系统排名   3  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用