作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Python 和 Selenium。我希望在 View 内按像素滚动,而不是按元素滚动。重点是循环直到我滚动到列表末尾。作为训练,我一直在尝试滚动所有喜欢这个 Instagram 帖子的人的列表:https://www.instagram.com/p/BuT_u-UAKn1/ 。我知道如何按元素滚动:
elements = driver.find_elements_by_xpath("//*[@id]/div/a")
driver.execute_script("return arguments[0].scrollIntoView();", elements[-1])
但我想按像素滚动。我尝试执行以下操作:
driver.execute_script("return arguments[0].scrollIntoView(true);", elements)
driver.execute_script("window.scrollBy(0,200);")
这样做时,会出现以下错误:
JavascriptException: Message: TypeError: arguments[0].scrollIntoView is not a function
有人知道如何按像素滚动到 View 中吗?谢谢
最佳答案
以下内容对我有用。
#first move to the element
self.driver.execute_script("return arguments[0].scrollIntoView(true);", element)
#then scroll by x, y values, in this case 10 pixels up
self.driver.execute_script("window.scrollBy(0, -10);")
当你说滚动(0,200)时。正数表示向下滚动。如果要向上滚动,请使用负数-200
另请参阅此处的文档:https://developer.mozilla.org/en-US/docs/Web/API/Window/scrollBy
如果您使用的浏览器不支持scrollToOptions,请切换到更好、更受支持的浏览器。
另一种可能的解决方案是实现 webDriverWait 以使特定元素在 HTML DOM 中可见
element = WebDriverWait(self.driver, 10).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "element_css")))
self.driver.execute_script("return arguments[0].scrollIntoView(true);", element)
您也尝试使用 ActionChains
element = driver.find_element_by_id("id") # the element you want to scroll to
ActionChains(driver).move_to_element(element).perform()
移动到元素后,就可以使用滚动代码
您还可以尝试添加偏移量。如果您一直向下滚动到底部,某些网页将不会加载新内容。有些网页仅在您到达页面末尾时才加载新内容。
document.documentElement.scrollHeight-10
一种不太传统的方法是在代码中执行 javascript。还可以尝试使用 selenium 来最大化您的窗口。有时窗口的大小会影响Selenium的运行
driver.maximize_window()
findThis = driver.find_element_by_css_selector("CSS SELECTOR HERE")
jsScript = """
function move_up(element) {
element.scrollTop = element.scrollTop - 1000;
}
function move_down(element) {
console.log('Position before: ' + element.scrollTop);
element.scrollTop = element.scrollTop + 1000;
console.log('Position after: ' + element.scrollTop);
}
move_up(arguments[0]);
"""
driver.execute_script(jsScript, findThis)
关于python - 使用 Python 进行网页抓取 : How to scroll into a view by pixels?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54989615/
我是一名优秀的程序员,十分优秀!