4

unable to scroll the tab profile

Hi, I am able to switch between tabs, access all elements. I am unable to scroll in this iframe. Please help. Code I am using is as follows.

    iframe = self.browser.find_elements_by_tag_name('iframe')[0]
    self.browser.switch_to_frame(iframe)

    # Iterating through tabs
    for tab_name in soup.find_all('md-dummy-tab'):
        return_dict[tab_name.text] = []
        tab_names.append(tab_name.text)
        # clicking on tabs one by one
        self.force_click('xpath=/html/body/div/md-content/md-tabs/md-tabs-wrapper/md-tabs-canvas/md-pagination-wrapper/md-tab-item[%s]/span' % tab)
        tab += 1
        time.sleep(2)

        # Scrolling
        try:
            self.browser.execute_async_script("frame.scrollTo(0, 10000);")
        except:
            pass
        time.sleep(2)

3 Answers 3

1

You can use this code to scroll-down in frame.

frame.contentWindow.scrollTo(0, 300);

For more info you can see this link :- scroll an iframe from parent page

Sign up to request clarification or add additional context in comments.

5 Comments

In python, do we have an equivalent method?
you can use javaScript in python ton run this javaScript code driver.execute_script("document.you'rlocator('comment-user').contentWindow.scrollTo(0, 300)")
self.browser.execute_script('%s.contentWindow.scrollTo(0, 300);' % iframe) "iframe" is the local variable. Error. selenium.common.exceptions.WebDriverException: Message: expected expression, got '<'.
do you need to scroll to a specific location within iframe? what about moving and bringing focus to an element inside iframe actions = ActionChains(driver) actions.move_to_element(menu)
I am actually trying to retrieve table data in the frame. Table is having 27 rows, but while getting page source and parsing it, I am getting only first 20 rows of data. So i need to scroll to end of the table and get page source.
1

I found the following commands to help. First, assuming one has already switched to an iframe where the element is accessible, store the location of that element. Then switch back to the default content and scroll in the window. Then, search again for the iframe, switch to that iframe, and reload any other dynamical variables in Selenium needed to continue.

length = prods[p].location["y"]
self.driver.switch_to.default_content()
self.driver.execute_script("window.scrollTo(0,"+str(length) + ");")
iframe = self.driver.find_elements_by_xpath('.//iframe[contains(@id,"frame")]')
self.driver.switch_to_frame(iframe[0])
prods = self.driver.find_elements_by_xpath('.//div[@class="products"]')
prods[p].click()

Comments

1

Try location_once_scrolled_into_view:

# assume `driver` is an instance of `WebDriver`
element = driver.find_element(By.CSS_SELECTOR, 'some_element')
# `location_once_scrolled_into_view` is a property that behaves like function
element.location_once_scrolled_into_view

A Python function wrapper:

# it's not necessary to switch into the iframe where your element is located before calling this function.
def scroll_into_view(driver, element=None, css_selector=None):
    if (not element) and (not css_selector):
        return
    if css_selector and (not element):
        element = driver.find_element_by_css_selector(css_selector)
    driver.execute_script('arguments[0].scrollIntoView({block: "center"})', element)

more about javascript function scrollIntoView

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.