zoukankan      html  css  js  c++  java
  • python selenium 滚动条处理、页面拖动

      selenium中没有直接控制滚动条的方法,可以使用方法:execute_script(),可以直接执行js的脚本。

      一、竖向滚动条控制,三种方法总有一款适合你。

        1.滚动条拉到最底:

          js="var q=document.documentElement.scrollTop=10000"

          driver.execute_script(js)

        2.滚动条拉到最底:    

          js="var q=document.getElementById('id').scrollTop=10000"

          driver.execute_script(js)

          这里的id为滚动条的id,滚动条没有id的网页此方法不适用。

        3.滚动条拉到最底:

          js = "var q=document.body.scrollTop=10000"

          driver.execute_script(js)

          可以修改scrollTop 的值来定位右侧滚动条的位置,0是最最顶部,10000是最底部。   

                在百度中搜索selenium,拖动滚动条至最底端:

    from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    from time import sleep
    
    driver = webdriver.Chrome()
    driver.get("https://www.baidu.com")
    driver.maximize_window()
    # 搜索 selenium
    driver.find_element_by_id("kw").send_keys("selenium")
    driver.find_element_by_id("su").click()
    # 等待元素可见
    WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.XPATH,'//*[@id="5"]/h3/a')))
    # 将滚动条下拉至最低
    js="var q=document.documentElement.scrollTop=10000"
    driver.execute_script(js)

       二、横向滚动条控制

        1.通过坐标控制横向和纵向滚动条 scrollTo(x, y)

        js = "window.scrollTo(100,400);"

        driver.execute_script(js)

      三、将目标元素拖动到页面可见区域

        1.可见元素与页面“底端”对齐,scrollIntoView(false)

        2.可见元素与页面“顶端”对齐,scrollIntoView()

      在百度中搜索selenium,拖动元素至页面底端,便于点击操作(因为在百度中将元素拖动至页面顶端时,会被百度网页自带的表头遮挡住,点击时会报错)

    from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    from time import sleep
    
    driver = webdriver.Chrome()
    driver.get("https://www.baidu.com")
    driver.maximize_window()
    # 搜索 selenium
    driver.find_element_by_id("kw").send_keys("selenium")
    driver.find_element_by_id("su").click()
    # 等待元素可见
    WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.XPATH,'//*[@id="5"]/h3/a')))
    # 1.先找到元素
    element = driver.find_element_by_xpath('//*[@id="5"]/h3/a')
    
    # 2.利用js将元素拖动到可见区域
    driver.execute_script("arguments[0].scrollIntoView(false);",element)  #可见元素与页面“底端”对齐

     执行结果如下:

      三、滚动页面到最底部

          方法:window.scrollTo

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

    from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    from time import sleep
    
    driver = webdriver.Chrome()
    driver.get("https://www.baidu.com")
    driver.implicitly_wait(20)
    driver.maximize_window()
    # 搜索 selenium
    driver.find_element_by_id("kw").send_keys("selenium")
    driver.find_element_by_id("su").click()
    # 等待元素可见
    WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.XPATH,'//*[@id="5"]/h3/a')))
    # 1.操作元素
    driver.find_element_by_xpath('//*[@id="5"]/h3/a').click()
    
    # 2.等待新窗口打开
    WebDriverWait(driver,10).until(EC.new_window_is_opened(windows))
    
    # 获取当前所有窗口句柄
    windows = driver.window_handles
    
    # 3.切换到最后一个窗口
    driver.switch_to.window(windows[-1])
    
    # 滚动页面到最底部
    driver.execute_script("window.scrollTo(0,document.body.scrollHeight)")
    sleep(5)
    driver.quit()

    ==================================================================================

    尊重原创,若需转载请注明出处:https://www.cnblogs.com/lizhe860/

    ================================================================================== 

  • 相关阅读:
    Qt C++中的关键字explicit——防止隐式转换(也就是Java里的装箱),必须写清楚
    有栖川有栖《马来铁道之谜》读后感
    Qt多国语言QT_TR_NOOP和QT_TRANSLATE_NOOP
    Qt调用VC++生成的动态链接库
    QTabWidget添加自定义样式
    Qt跨线程信号和槽的连接(默认方式是直连和队列的折中)
    OO五大原则
    《Head First Python》学习笔记03 异常处理
    使用Qt实现MDI风格的主窗体
    Qt中文乱码问题(比较清楚,同一个二进制串被解释成不同的语言)
  • 原文地址:https://www.cnblogs.com/lizhe860/p/9456356.html
Copyright © 2011-2022 走看看