如何使用 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
.
我正在尝试使用 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
.