我需要能够向上滚动,然后向下滚动以找到Selenium的一些元素
我已经看到了很多问题和答案,我找到的主要想法是self.web_driver.execute_script("return arguments[0].scrollIntoView(true);", element)
,这就是我目前在我的代码中所拥有的。但这还不够好,因为此代码仅向下滚动,因此如果元素位于可滚动视图的上部,则无法找到该元素。
所以我需要一个首先向上滚动的脚本(向上翻页?)然后开始向下滚动。
我试过这样的事情
self.web_driver.execute_script("return arguments[0].scrollIntoView(true);", element)
self.web_driver.execute_script("window.scrollTo(0, -document.body.scrollHeight);")
self.web_driver.execute_script("return arguments[0].scrollIntoView(true);", element)
但这不会向上滚动:(
答案 0 :(得分:4)
您可以尝试以下代码向上滚动页面:
from selenium.webdriver.common.keys import Keys
self.web_driver.find_element_by_tag_name('body').send_keys(Keys.HOME)
另一种方式(优先)你可以向上滚动到所需的元素:
element = self.web_driver.find_element_by_xpath('SOME_XPATH') # you can use ANY way to locate element
coordinates = element.location_once_scrolled_into_view # returns dict of X, Y coordinates
self.web_driver.execute_script('window.scrollTo({}, {});'.format(coordinates['x'], coordinates['y']))
答案 1 :(得分:1)
您也可以使用scrollTo()
和self.web_driver.execute_script("coordinates = arguments[0].getBoundingClientRect();scrollTo(coordinates.x,coordinates.y);", element)
{{1}}
我测试了它,它上下起伏。
答案 2 :(得分:1)
多年来,我发现了handy tricky hacky stuff
(我已经使用Selenium已有150年了)。
每当您无法向上滚动表单时,只需 将键发送到输入 在页面顶部。驱动程序将找到它并自动向上滚动页面以执行操作。
每当我想到这个窍门时,我就意识到成为一个老人并不坏。
祝你新水手好运,在Selenia海岸见。
答案 3 :(得分:1)
如果将驱动程序定义为webdriver.Chrome()
或webdriver.Firefox()
,则可以使用以下代码向上滚动:
from selenium.webdriver.common.keys import Keys
driver.find_element_by_tag_name('body').send_keys(Keys.HOME)
此外,要向下滚动,您可以尝试以下代码:
driver.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight", scr1)
scr1
是要滚动的box xpath。
您也可以通过以下代码滚动到页面中间:
driver.execute_script("arguments[0].scrollTop = arguments[0].scrollWidth", scr1)
答案 4 :(得分:1)
尝试一下,效果很好:
view_port_height = "var viewPortHeight = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);"
element_top = "var elementTop = arguments[0].getBoundingClientRect().top;"
js_function = "window.scrollBy(0, elementTop-(viewPortHeight/2));"
scroll_into_middle = view_port_height + element_top + js_function
driver.execute_script(scroll_into_middle, element)
答案 5 :(得分:1)
这对我非常有用:
WebElement scrolling = new WebDriverWait(driver, 10)
.until(ExpectedConditions.visibilityOfElementLocated(By.className("classSomething")));
//SCroll Down
((JavascriptExecutor) driver).executeScript("arguments[0].scrollTo(0, arguments[0].scrollHeight)", scrolling);
//Scroll Up
((JavascriptExecutor) driver).executeScript("arguments[0].scrollTo(0, arguments[0].scrollUp)", scrolling);