【问题标题】:Selenium: Dynamically loaded page causes automatic scrolling to failSelenium:动态加载的页面导致自动滚动失败
【发布时间】:2016-06-13 16:26:45
【问题描述】:

我正在使用 Python 的 Selenium 来导航动态网页 (link)。

我想自动向下滚动到页面上的 y 点。我尝试了各种方法来编写此代码,这似乎适用于其他页面,但不适用于此特定网页。

我的一些努力似乎不适用于带有 Selenium 的 Firefox:

from selenium import webdriver

driver = webdriver.Firefox()
driver.get("http://en.boerse-frankfurt.de/etp/Deka-Oekom-Euro-Nachhaltigkeit-UCITS-ETF-DE000ETFL474")

通过滚动到 y 位置:

driver.execute_script("window.scrollTo(0, 1400);")

或者通过查找元素:

try:
    find_scrollpoint = driver.find_element_by_xpath("//*[@id='main-wrapper']/div[10]/div/div[1]/div[1]")
except:
    pass
else:
    scrollpoint = find_scrollpoint.location["y"]
    driver.execute_script("window.scrollTo(0, scrollpoint);")

问题:

在这样的网页上可能出现什么异常情况,这个非常典型的scrollTo 代码可能会失败?

可以做些什么来减轻它?也许按键向下滚动 - 但它仍然必须知道何时停止按下。

【问题讨论】:

    标签: python selenium


    【解决方案1】:

    这只是一个动态的页面。我会wait for this specific element to be visible 然后滚动到它的视图。这对我有用:

    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    
    
    driver = webdriver.Firefox()
    driver.get("http://en.boerse-frankfurt.de/etp/Deka-Oekom-Euro-Nachhaltigkeit-UCITS-ETF-DE000ETFL474")
    
    wait = WebDriverWait(driver, 10)
    elm = wait.until(EC.visibility_of_element_located((By.XPATH, "//*[@id='main-wrapper']/div[10]/div/div[1]/div[1]")))
    
    driver.execute_script("arguments[0].scrollIntoView();", elm)
    

    【讨论】:

    • 谢谢亚历克斯!整洁的解决方案。
    猜你喜欢
    • 2018-07-28
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 2021-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多