El desplazamiento de ventana no es una operación de página web, sino un comportamiento de ventana. Para lograr el desplazamiento de la ventana, debe enviar comandos js en selenium (consulte: 8.2 Cómo enviar comandos js en selenium)
Escenarios de uso:
1. Hay productos con carga diferida: no todas las cosas se cargan a la vez, pero una determinada acción debe ejecutarse Están saliendo cosas nuevas (como: bajar la barra de desplazamiento para cargar cosas nuevas)
2. Quiero hacer clic u operar un elemento, pero este elemento no se puede ver en la página. El elemento debe colocarse en el rango visible antes de poder hacer clic en él.
Introducir 3 métodos de desplazamiento de ventana:
Método 1: método de coordenadas
Pero rara vez usamos este método, porque generalmente no sabemos la cantidad de píxeles del elemento que estamos posicionando.
window.scrollTo(0,1000) # f(x,y) x: abscisa, y: ordenada, unidad: xp (píxel)
ejercicio 1
from selenium import webdriver
import time
driver = webdriver.Chrome() # 初始化一个谷歌浏览器
driver.maximize_window() # 浏览器窗口最大化
driver.get("https://readhub.cn/topics") # 打开一个存在懒加载的网页
time.sleep(5) # 等待一段时间,待页面加载出来再执行js代码
# 方法一:坐标法
driver.execute_script('window.scrollTo(0,1000)') # 横坐标不变,纵坐标 滚动到1000像素点
time.sleep(2) # 等待一段时间,方便查看滚动的效果
driver.execute_script('window.scrollTo(0,2000)') # 再滚动一次
time.sleep(2) # 等待一段时间,方便查看滚动的效果
Método 2: desplácese hasta la parte inferior de la ventana y luego ubique el elemento que está buscando
window.scrollTo(0,document.body.scrollHeight) # document.body.scrollHeight La altura de la ventana actual
ejercicio 2
from selenium import webdriver
import time
driver = webdriver.Chrome() # 初始化一个谷歌浏览器
driver.maximize_window() # 浏览器窗口最大化
driver.get("https://readhub.cn/topics") # 打开一个存在懒加载的网页
time.sleep(5) # 等待一段时间,待页面加载出来再执行js代码
# 方法二:滚动到窗口底部
# 拉到底部,但是有新的加载就会退回到三分之二的位置;加载出来后又跳到四分之一的位置
driver.execute_script('window.scrollTo(0,document.body.scrollHeight)')
time.sleep(2) # 等待一段时间,方便查看滚动的效果
driver.execute_script('window.scrollTo(0,document.body.scrollHeight)') # 再继续滚动
Método 3: desplazar el elemento al rango visible
Escenario: A veces, el elemento está debajo de la comparación, debe desplazarse hacia abajo en la página para ver el elemento y hacer clic en
document.getElementById(“id”).scrollIntoView()
o escribir en dos líneas:
el = document.getElementById(“id” )
el.desplazarse hacia la vista()
Ejercicio 3
from selenium import webdriver
import time
driver = webdriver.Chrome() # 初始化一个谷歌浏览器
driver.maximize_window() # 浏览器窗口最大化
driver.get("https://www.baidu.com/s?ie=UTF-8&wd=%E8%8A%B1%E9%9D%99%E9%80%B8") # 打开百度搜索“花静逸”的结果页
time.sleep(5) # 等待一段时间,待页面加载出来再执行js代码
# document.getElementsByClassName("pc")[1] # js指令:百度搜索结果页,定位页面底部翻页的元素“2”
driver.execute_script('document.getElementsByClassName("pc")[1].scrollIntoView()')
# 或者分成两行写
driver.execute_script('el = document.getElementsByClassName("pc")[1]')
driver.execute_script('el.scrollIntoView()')
Nota: Hay un hoyo en el ejercicio 3.
GetElementsByClassName localiza un conjunto de elementos.Necesitamos obtener el elemento "2" por índice (comenzando desde 0)