Прокрутка вниз не работает должным образом (Python) - PullRequest
1 голос
/ 07 апреля 2020

Я пытаюсь прокрутить веб-страницу вниз, чтобы избежать «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-рассмотреть ::: bbva_prestamos: e ::: text :: & scp = true & gclid = Cj0KCQjw6sHzBRCbARIsAF8FMpWbbhXlRD8SluBVkA9-qRsuTSNQxn2E6avb * 1010B0 * 0 * 0 * 0 * 0 * 0 * 0

Ответы [ 2 ]

1 голос
/ 07 апреля 2020

Элемент присутствует внутри 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

1 голос
/ 07 апреля 2020

Существует несколько способов прокрутки вниз на веб-странице. В настоящее время 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']")))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...