0

i try to scroll down in a table on a website with the following code:

import os
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
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 webdriver_manager.chrome import ChromeDriverManager

if __name__ == '__main__':  
  WAIT = 1
  print(f"Checking Browser driver...")
  os.environ['WDM_LOG'] = '0' 
  options = Options()
  options.add_argument("start-maximized")
  options.add_experimental_option("prefs", {"profile.default_content_setting_values.notifications": 1})    
  options.add_experimental_option("excludeSwitches", ["enable-automation"])
  options.add_experimental_option('excludeSwitches', ['enable-logging'])
  options.add_experimental_option('useAutomationExtension', False)
  options.add_argument('--disable-blink-features=AutomationControlled') 
  srv=Service(ChromeDriverManager().install())
  driver = webdriver.Chrome (service=srv, options=options)    
  waitWD = WebDriverWait (driver, 10)         
  
  link = "https://www.appliancepartspros.com/ge-dryer-timer-knob-we1m654-ap3995088.html"
  driver.get (link)     
  driver.execute_script("arguments[0].scrollIntoView(true);", waitWD.until(EC.presence_of_element_located((By.XPATH,'//h2[text()="Cross Reference and Model Information"]'))))         
  tmpBODY = driver.find_element(By.XPATH, '//div[@class="m-bsc"]/a[@name="crossref"]')
  for _ in range(5):
    tmpBODY.send_keys (Keys.PAGE_DOWN)

But i allways get this error-message:

(selenium) C:\DEV\Fiverr\TRY\biglaundrystore>python try.py
Checking Browser driver...
Traceback (most recent call last):
  File "C:\DEV\Fiverr\TRY\biglaundrystore\try.py", line 31, in <module>
    tmpBODY.send_keys (Keys.PAGE_DOWN)
  File "C:\DEV\.venv\selenium\lib\site-packages\selenium\webdriver\remote\webelement.py", line 231, in send_keys       
    self._execute(
  File "C:\DEV\.venv\selenium\lib\site-packages\selenium\webdriver\remote\webelement.py", line 404, in _execute        
    return self._parent.execute(command, params)
  File "C:\DEV\.venv\selenium\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 440, in execute
    self.error_handler.check_response(response)
  File "C:\DEV\.venv\selenium\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 245, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
  (Session info: chrome=113.0.5672.127)

This is the table i would like to scrolldown - as you can see the page-downs are not working as expected:

enter image description here

Rapid1898
  • 895
  • 1
  • 10
  • 32

2 Answers2

0

Maybe it is a iframe and you can search "iframe" in page source, you should go to iframe firstly, then scroll down

and you can use scroll to go down

from selenium.webdriver.common.actions.wheel_input import ScrollOrigin
from selenium.webdriver import ActionChains
from selenium import webdriver
scroll_origin = ScrollOrigin.from_viewport(0, 0)
ActionChains(driver).scroll_from_origin(scroll_origin, 0, kkk_y).perform()

this answer maybe helpful

https://stackoverflow.com/a/76598852/17601704

view the document

https://www.selenium.dev/documentation/webdriver/actions_api/wheel/#scroll-to-element https://www.selenium.dev/documentation/webdriver/interactions/frames/

Jiu_Zou
  • 463
  • 1
  • 4
0

I think i found a solution using this code:

(probably not the most elegant solution - but it seems its doing what i need at the end)

import os
import time
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
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 webdriver_manager.chrome import ChromeDriverManager

if __name__ == '__main__':  
  WAIT = 1
  print(f"Checking Browser driver...")
  os.environ['WDM_LOG'] = '0' 
  options = Options()
  options.add_argument("start-maximized")
  options.add_experimental_option("prefs", {"profile.default_content_setting_values.notifications": 1})    
  options.add_experimental_option("excludeSwitches", ["enable-automation"])
  options.add_experimental_option('excludeSwitches', ['enable-logging'])
  options.add_experimental_option('useAutomationExtension', False)
  options.add_argument('--disable-blink-features=AutomationControlled') 
  srv=Service(ChromeDriverManager().install())
  driver = webdriver.Chrome (service=srv, options=options)    
  waitWD = WebDriverWait (driver, 10)         
  
  link = "https://www.appliancepartspros.com/ge-dryer-timer-knob-we1m654-ap3995088.html"
  driver.get (link)  
  lastCounts = 0   
  while True:   
    print(f"Reading elements found {lastCounts}")
    driver.execute_script("arguments[0].scrollIntoView(true);", waitWD.until(EC.presence_of_element_located((By.XPATH,'//div[@id="xmodellist"]//tr[last()]'))))      
    time.sleep(WAIT)
    soup = BeautifulSoup (driver.page_source, 'lxml')  
    worker = soup.find("div", {"id": "xmodellist"})  
    worker = worker.find_all("tr")
    if len(worker) == lastCounts:
      break
    lastCounts = len(worker)
Rapid1898
  • 895
  • 1
  • 10
  • 32