簡體   English   中英

水平滾動元素 - Selenium Python

[英]Scroll element horizontally - Selenium Python

假設我想在某個元素中滾動滾動條。 例如,讓我們以鏈接“https://www.w3schools.com/howto/howto_css_table_responsive.asp”為例。 如果我運行:

element = driver.find_element_by_xpath("//table")

我得到了表格元素。 但是現在,我想水平滾動滾動條,即控制此表的視圖。 我怎樣才能做到這一點? 我已經嘗試過類似的東西:

driver.execute_script("arguments[0].scrollLeft = 200;",element)

但我沒有成功。 我也嘗試過發送密鑰,但它也不起作用。

您實際上不需要能夠看到 Selenium 的元素來定位它們。

只需繼續定位“屏幕外”的元素,就像它們在屏幕上一樣。

Selenium 的目標是 DOM - 作為一個松散的類比,我可能會在評論中被烘烤,就像一個具有無限長和寬的屏幕 - 所以不需要滾動 - 它(selenium)已經可以“看到”一切“在” '無限屏幕'

如果您在從相關表中選擇特定元素時遇到問題(如果您需要特定的代碼片段),請隨時發表評論 - 我對 Selenium 相當熟悉。

編輯:

在您的特定情況下,由於它們是動態加載的,因此您 100% 正確,您需要滾動才能獲取數據。 讓我們點擊底部展開列表的More Financial Data按鈕來處理垂直滾動。

現在向右滾動 - 因為我們可以一直向右滾動並顯示我們需要訪問的所有數據(假設您沒有高級帳戶)。

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 selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains

driver = webdriver.Firefox()
url = "https://www.morningstar.com/stocks/xnas/tsla/financials"
driver.get(url)
driver.maximize_window()
# Click on Income Statement
xpath = '//*[@id="__layout"]/div/div[2]/div[3]/main/div[2]/div/div/div[1]/sal-components/section/div/div/div/div/div[2]/div/div/div[2]/div[2]/div/div[2]/div/div[2]/div[2]/div[1]/div[1]/a'
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, xpath))).click()
# click on More Financials Detail Data
xpath = '//*[@id="__layout"]/div/div[2]/div[3]/main/div[2]/div/div/div[1]/sal-components/section/div/div/div/div/div[2]/div/div[2]/div/div[2]/div/div[3]/div[2]/div/a'
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, xpath))).click()

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

xpath='/html/body/div[2]/div/div/div[2]/div[3]/main/div[2]/div/div/div[1]/sal-components/section/div/div/div/div/div[2]/div/div[2]/div/div[2]/div/div[2]/div[4]/div/div[3]/div[2]/div[2]'
horizontal_bar_width = driver.find_element_by_xpath(xpath).rect['width']
slider = driver.find_element_by_xpath(xpath)
ActionChains(driver).click_and_hold(slider).move_by_offset(horizontal_bar_width/2, 0).release().perform()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM