2025年3月15日 星期六 甲辰(龙)年 月十四 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > Python

Python+Selenium执行JavaScript,控制滚动条移动

时间:12-10来源:作者:点击数:27
CDSY,CDSY.XYZ

执行js脚本来控制浏览器竖向滚动条:

打开百度贴吧,然后拖动滚动条到左侧 “地区"

  • # coding=utf-8
  • import time
  • from selenium import webdriver
  • driver = webdriver.Chrome()
  • driver.maximize_window()
  • driver.implicitly_wait(6)
  • driver.get("https://tieba.baidu.com/index.html")
  • time.sleep(1)
  • target_elem = driver.find_element_by_link_text("地区")
  • driver.execute_script("return arguments[0].scrollIntoView();",target_elem) # 用目标元素参考去拖动
  • #driver.execute_script("scroll(0,2400)") # 这个是第二种方法,比较粗劣,大概的拖动

本人在添加cbs满减活动的时候用到:

思路就是:首先能获取当前弹框中产品的总数量,然后每获取一个产品就以目标元素为参考去拖动滚动条,这样既能全部获取也能按照产品顺序装进列表中:

  • # 选择iframe
  • driver.switch_to.frame(0)
  • time.sleep(2)
  • cbs_all_product = []
  • # 获取该商家下cbs里的所有产品element对象,看不到也能获取到,只是结果是空,总数是正确的
  • all_product_element = driver.find_elements_by_xpath('//*[@id="scroll1"]/table/tbody/tr/td[2]')
  • # 获取所有产品的长度,因为还需要滚动条滚动,所以后面的数据是看不到的
  • length = len(all_product_element)
  • time.sleep(3)
  • # 通过获取总产品数,每获取一个产品就以目标元素为参考去拖动滚动条
  • for j in range(1, length + 1):
  • product_element = driver.find_element_by_xpath(
  • '//*[@id="scroll1"]/table/tbody/tr[' + str(j) + ']/td[2]')
  • cbs_all_product.append(product_element.text)
  • time.sleep(2)
  • driver.execute_script("return arguments[0].scrollIntoView();", product_element)
  • print(cbs_all_product)

其他扩展:

  • # 拉到顶部
  • def scroll_top(driver):
  • 10 if driver.name == "chrome":
  • 11 js = "var q=document.body.scrollTop=0"
  • 12 else:
  • 13 js = "var q=document.documentElement.scrollTop=0"
  • 14 return driver.execute_script(js)
  • 15
  • 16 # 拉到底部
  • 17 def scroll_foot(driver):
  • 18 if driver.name == "chrome":
  • 19 js = "var q=document.body.scrollTop=100000"
  • 20 else:
  • 21 js = "var q=document.documentElement.scrollTop=100000"
  • 22 return driver.execute_script(js)
CDSY,CDSY.XYZ
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐