Прокрутка в другом слое в Chrome с использованием Selenium в Python - PullRequest
0 голосов
/ 23 марта 2020

Я пишу код в python, используя модуль selenium, и я хочу прокрутить список, который находится на другом слое в том же окне. Представьте, что вы go в Instagram, нажмите на подписчиков, а затем wi sh, чтобы прокрутить вниз, чтобы селен мог составить список всех пользователей, которые следят за этой страницей.

Моя проблема - мои прокрутки кода на слое ниже, который является стеной пользователя.

def readingFollowers(self):
    self.driver.find_element_by_xpath("//a[contains(@href, '/followers')]")\
        .click()    

    sleep(2.5)

    scroll_box = self.driver.find_element_by_xpath('/html/body/div[4]/div/div[2]')

    # Get scroll height
    last_height = self.driver.execute_script("return arguments[0].scrollHeight", scroll_box)

    while True:
        # Scroll down to bottom
        self.driver.execute_script("window.scrollTo(0, arguments[0].scrollHeight);", scroll_box)

        # Wait to load page
        sleep(1)

        # Calculate new scroll height and compare with last scroll height
        new_height = self.driver.execute_script("return arguments[0].scrollHeight", scroll_box)
        if new_height == last_height:
            break
        last_height = new_height

Я использовал Google Chrome, и элемент inspect будет одинаковым во всех системах (скорее всего).

Для полного кода вы можете прокомментировать меня, в случае, если вы не в состоянии понять проблему. Я могу дать вам код, необходимый для воссоздания ситуации для лучшего понимания.

1 Ответ

0 голосов
/ 23 марта 2020

Я предполагаю, что вы уже вошли в учетную запись IG.

def readingFollowers(self):
    #click followers
    self.driver.find_element_by_xpath('//a[@class="-nal3 "]').click()
    time.sleep(5)

    pop_up = driver.find_element_by_xpath('//div[@class="isgrP"]')
    height = driver.execute_script("return arguments[0].scrollHeight", pop_up)
    initial_height = height

    #default follower count is 12
    followers_count = 12
    while True:
        driver.execute_script("arguments[0].scrollBy(0,arguments[1])", pop_up, initial_height)
        time.sleep(5)

        #count loaded followers
        count = len(driver.find_elements_by_xpath('//div[@class="PZuss"]/li')) 
        if count == followers_count:
            break
        followers_count = count

        #add height because the list is expanding
        initial_height+=initial_height

Мне потребовалось некоторое время, но это работает.

...