您当前的位置:首页 > 计算机 > 编程开发 > Python

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

时间:12-10来源:作者:点击数:
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
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐