向下滚动无法正常工作(Python)

2024-06-06 23:54:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图向下滚动网页以避免“MoveTargetAutofBoundsException”,但无论我尝试什么,网页都只会向下滚动几英寸

以下是我尝试过但尚未奏效的解决方案:

#1
element = driver.find_element_by_xpath('//*[@id="advisor"]')
element.location_once_scrolled_into_view

#2
from selenium.webdriver.common.keys import Keys
html = browser.find_element_by_tag_name('html')
html.send_keys(Keys.END)

#3 No matter what number I use for Y, the scroll down will always be the same
driver.execute_script("window.scrollTo(0, Y)")

我正在尝试向下滚动的网页是:https://www.bbva.es/personas/productos/prestamos/simulador-prestamos-personales.html?cid=sem:br:ggl:spain---consumo-prestamo_personal-open-:br_topperformance_open_ex-consideration:::bbva_prestamos:e:::text::&scp=true&gclid=Cj0KCQjw6sHzBRCbARIsAF8FMpWbbhXlRD8SluBVkA9-qRsuTSNQxn2E6avbmeDVRnb02gs1BnRef30aAtktEALw_wcB

提前谢谢


Tags: thebr网页byhtmldriverelementopen
2条回答

元素存在于iframe中。您需要先切换它

driver.get("https://www.bbva.es/personas/productos/prestamos/simulador-prestamos-personales.html?cid=sem:br:ggl:spain -consumo-prestamo_personal-open-:br_topperformance_open_ex-consideration:::bbva_prestamos:e:::text::&scp=true&gclid=Cj0KCQjw6sHzBRCbARIsAF8FMpWbbhXlRD8SluBVkA9-qRsuTSNQxn2E6avbmeDVRnb02gs1BnRef30aAtktEALw_wcB")
WebDriverWait(driver,10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe.iframe__base")))
element=WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.XPATH,'//div[@id="advisor"]')))
element.location_once_scrolled_into_view

您需要导入以下库

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

更新

这是完整的代码。要启用计算器按钮,您需要在金额文本框中输入值。但是正常的webdriver单击不起作用,因此使用了javascripts executor

driver=webdriver.Chrome()
driver.get("https://www.bbva.es/personas/productos/prestamos/simulador-prestamos-personales.html?cid=sem:br:ggl:spain -consumo-prestamo_personal-open-:br_topperformance_open_ex-consideration:::bbva_prestamos:e:::text::&scp=true&gclid=Cj0KCQjw6sHzBRCbARIsAF8FMpWbbhXlRD8SluBVkA9-qRsuTSNQxn2E6avbmeDVRnb02gs1BnRef30aAtktEALw_wcB")
WebDriverWait(driver,10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe.iframe__base")))
element=WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.XPATH,'//div[@id="advisor"]')))
element.location_once_scrolled_into_view
WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.XPATH,'//input[@id="amount"]'))).send_keys("25000")
elemen1=WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.XPATH,"//label[@for='cli-no']/span[text()='No']")))
driver.execute_script("arguments[0].click();", elemen1)
button=WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//button[@id='next']")))
driver.execute_script("arguments[0].click();", button)

快照

enter image description here

在网页上向下滚动有多种方式。当前,您的网页上有ifrane,您需要将控件切换到iframe,然后再滚动到下面的代码部分,以获取参考:

1。您也可以使用此按钮向下滚动到页面底部。

driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

2。您还可以使用ActionChains移动到元素

hover = ActionChains(driver)
hover.move_to_element(menu).perform()

3.基于身高

driver.execute_script("window.scrollTo(0, Y)")

其中Y是高度(在全高清显示器上为1080)

工作代码:

driver.maximize_window()

wait = WebDriverWait(driver, 10)
driver.get("https://www.bbva.es/personas/productos/prestamos/simulador-prestamos-personales.html?cid=sem:br:ggl:spain -consumo-prestamo_personal-open-:br_topperformance_open_ex-consideration:::bbva_prestamos:e:::text::&scp=true&gclid=Cj0KCQjw6sHzBRCbARIsAF8FMpWbbhXlRD8SluBVkA9-qRsuTSNQxn2E6avbmeDVRnb02gs1BnRef30aAtktEALw_wcB")
driver.find_element_by_tag_name('body').send_keys("Keys.ESCAPE")
driver.switch_to.frame("content-iframe")
driver.execute_script("window.scrollTo(0, Y)")
inputBox = wait.until(EC.element_to_be_clickable((By.XPATH, "//*[@id='advisor']")))

相关问题 更多 >