1. 程式人生 > >Python+Selenium執行JavaScript,控制滾動條移動

Python+Selenium執行JavaScript,控制滾動條移動

執行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)