关于python:使用webdriver滚动到元素?

Scrolling to element using webdriver?

我仍在学习,并回应我的一个问题:在这里,我被告知这可能是因为所讨论的元素不在我的视野之内。

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

可以使用"org.openqa.selenium.interactions.actions"类移动到元素:

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

当我尝试使用上面的滚动到元素时:它表示WebElement未定义。

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

编辑:正如Alcxe所指出的,这是Java代码。

但与此同时,在尝试了一段时间后。我已经找到WebElement的导入方法:

1
from selenium.webdriver.remote.webelement import WebElement

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

这也是一个很好的教训,IMO:

转到:文档这个

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

需要分为上面提到的命令格式。


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

1
2
3
4
5
6
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()滚动到视图:

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

如果您对差异感兴趣:

  • ScrollIntoView与MoveToElement


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

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

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


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

如果要导航到页面并向下滚动到带有@id的元素,可以通过将#element_id添加到url来自动完成。

例子

假设我们需要导航到SeleniumWaits文档,并向下滚动页面到"隐式等待"部分。我们能做到

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

并添加用于滚动的代码…或使用

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

导航到页面并将页面自动滚动到带有id="implicit-waits"的元素(...)