爬蟲 Selenium 處理滾動條(15)

2021-10-08 04:06:58 字數 1859 閱讀 8445

selenium 處理滾動條

selenium並不是萬能的,有時候頁面上操作無法實現的,這時候就需要借助js來完成了

當頁面上的元素超過一屏後,想操作螢幕下方的元素,是不能直接定位到,會報元素不可見的。這時候需要借助滾動條來拖動螢幕,使被操作的元素顯示在當前的螢幕上。滾動條是無法直接用定位工具來定位的。selenium裡面也沒有直接的方法去控制滾動條,這時候只能借助j了,還好selenium提供了乙個操作js的方法:execute_script(),可以直接執行js的指令碼

一. 控制滾動條高度

1.1滾動條回到頂部:

js="var q=document.getelementbyid('id').scrolltop=0"

driver.execute_script(js)

1.2滾動條拉到底部

js="var q=document.documentelement.scrolltop=10000"

driver.execute_script(js)

可以修改scrolltop 的值,來定位右側滾動條的位置,0是最上面,10000是最底部

以上方法在firefox和ie瀏覽器上上是可以的,但是用chrome瀏覽器,發現不管用。chrome瀏覽器解決辦法:

js = "var q=document.body.scrolltop=0"

driver.execute_script(js)

二.橫向滾動條

2.1 有時候瀏覽器頁面需要左右滾動(一般螢幕最大化後,左右滾動的情況已經很少見了)

2.2 通過左邊控制橫向和縱向滾動條scrollto(x, y)

js = "window.scrollto(100,400)"

driver.execute_script(js)

三.元素聚焦

雖然用上面的方法可以解決拖動滾動條的位置問題,但是有時候無法確定我需要操作的元素在什麼位置,有可能每次開啟的頁面不一樣,元素所在的位置也不一樣,怎麼辦呢?這個時候我們可以先讓頁面直接跳到元素出現的位置,然後就可以操作了

同樣需要借助js去實現。 具體如下:

target = driver.find_element_by_***x()

driver.execute_script("arguments[0].scrollintoview();", target)

四. 參考**
from selenium import webdriver

from lxml import etree

import time

url = ""

# 載入瀏覽器

wd = webdriver.firefox()

# 傳送請求

wd.get(url)

# 要執行的js

js = "var q = document.documentelement.scrolltop=10000"

# 執行js

wd.execute_script(js)

time.sleep(3)

# 解析資料

e = etree.html(wd.page_source)

# 提取資料的xpath

price_xpath = '//ul[@class="gl-warp clearfix"]//div[@class="p-price"]/strong/i/text()'

# 提取資料的

infos = e.xpath(price_xpath)

print(len(infos))

# 關閉瀏覽器

wd.quit()

selenium操作滾動條

from selenium import webdriver from time import sleep driver webdriver.chrome driver.get driver.maximize window sleep 3 移動到絕對位置 js window.scrollto 0,1...

selenium滾動條操作

案例 開啟部落格首頁,將滾動條拖動到最底部,然後再拖動到最頂部 from selenium import webdriver from time import sleep,ctime driver webdriver.firefox driver.get sleep 3 print ctime 將滾...

selenium 操作滾動條

在自動化測試的過程中,難免會應用到翻頁鍵,但是webdriver提供的方法都是操作當前頁面可見的元素,對於未在當前範圍展示的翻頁鍵,該如何操作呢?driver webdriver.firefox driver.get 搜尋selenium,製造含有滾動條的環境 拖動滾動條至底部 js1 docume...