簡體   English   中英

向下滾動無法正常工作(Python)

[英]Scroll down not working properly (Python)

我正在嘗試向下滾動網頁以避免出現“MoveTargetOutOfBoundsException”,但無論我嘗試什么,網頁只會向下滾動幾英寸。

這是我嘗試過但沒有奏效的解決方案:

#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_w

提前致謝!

有多種方法可以在 web 頁面上向下滾動。 目前,您的 web 頁面上存在 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']")))

該元素存在於 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)

快照

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM