如何使用 Selenium Python 滚动内部滚动条

How do I scroll an internal scroll bar using Selenium Python

我正在尝试使用 Python 中的 Selenium 从网站上抓取数据,其中数据仅在我单击 'Details' 按钮后出现,问题是此按钮最初不可见并且需要在内部滚动条上滚动 (circled in red)

作为参考,以下是网站: https://www.abt-sportsline.com/tuning/configurator#80706385!43C6B47

目标是滚动此内部滚动条,以便我可以单击按钮和 view/scrape 数据。

这是我的初始代码:

scrollBar = driver.find_element(By.XPATH,'//*[@id="mCSB_1_dragger_vertical"]/div')
driver.execute_script("arguments.scrollBy(0,arguments[0].scrollHeight)", scrollBar)
temp_element = in_tab_object.find_element(By.CSS_SELECTOR,"div > div > div > div.row > div.col-xs-12.product-details > div > div.text-right.details-link > span.icon-ArrowRight")
temp_element.click()

这根本不会滚动内部栏,我收到以下错误:

selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable

我有另一个解决这个问题的想法,我找到滚动条容器并单击它的底部,因此一直向下滚动,但我不确定如何指定单击容器的局部坐标。

一些帮助将不胜感激!

因为它不在框架内,所以可以很容易地使用scrolled_once_into_view,这与js中的scrollIntoView()相同。

例如:

element = driver.find_element('xpath', "DETAILS_BUTTON_XPATH")
element.scrolled_once_into_view  # Ignore IDE errors for this command. It is working well. 

或者您可以使用以下(使用 JS 命令):

element = driver.find_element('xpath', "DETAILS_BUTTON_XPATH")
driver.execute_script("arguments[0].scrollIntoView();", element)

您可以试试 ActionChains。

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains as AC

dr = webdriver.Chrome("[path_to_your_chromedriver]")

dr.get("https://www.abt-sportsline.com/tuning/configurator#80713308!5972E27")

aa = dr.find_element_by_id("mCSB_1_scrollbar_vertical")

action = AC(dr)

action.click_and_hold(aa).move_by_offset(0,1).perform()

# Don't forget to release the click_and_hold, for example with:

action.reset_actions()

然而,这并不是很好。我觉得跟自定义滚动条有关系

在此处阅读有关操作链的更多信息:

https://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.common.action_chains

.