无法使用Selenium和Python滚动Instagram上的点赞页面

问题描述 投票:-1回答:1

我正在尝试构建一个网络抓取工具,使我可以抓取Instagram上帖子的“喜欢”的名字。我能够自动执行该程序,以打开instagram,登录,转到帖子并打开“被(n)个其他人喜欢”列表。The step I could reach

然后是下面的代码,目的是刮擦喜欢者的名字。由于一次只显示最喜欢的11个人,其余的只有在滚动后才会显示(这会触发AJAX请求,正如我从遇到类似问题的其他人那里读到的那样),因此我编写了这段代码,应该将第一个11个名称,将它们附加到列表中,打印出来,然后滚动。

no_of_pagedowns = 5

while no_of_pagedowns:

    liker_list = []
    likers = driver.find_elements_by_class_name("qyrsm")    

    for n in likers:

        #scrape the name of the likers
        liker = n.find_element_by_class_name("_4EzTm").get_attribute("textContent")
        liker_list.append(liker)

    no_of_pagedowns -= 1

    print(liker_list)

    time.sleep(1)

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

    #scrollcode
    driver.execute_script("javascript:window.scrollBy(0,660)") 

它可以工作,并且可以返回前十一个“喜欢”的人的名字,但是不会滚动。我认为问题在于代码未能将重点放在正确的元素上,但是我未能找出我应该关注的元素。它只给相同的11个人五次。我也尝试过从

替换“滚动代码”
    driver.execute_script("javascript:window.scrollBy(0,660)") 

类似

    driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")

    elem.send_keys(Keys.PAGE_DOWN)

where elem = driver.find_element_by_xpath('/html/body/div[4]/div/div[2]/div/div')

我也尝试过这段代码:

no_of_pagedowns = 5

while no_of_pagedowns:

    liker_list = []
    likers = driver.find_elements_by_class_name("qyrsm")    

    for n in likers:

        #scrape the name of the likers
        liker = n.find_element_by_class_name("_4EzTm").get_attribute("textContent")
        liker_list.append(liker)

    no_of_pagedowns -= 1

    print(liker_list)

    time.sleep(1)

    driver.find_element_by_xpath('/html/body/div[4]/div/div[2]/div/div').click()

    driver.execute_script("window.scrollBy(0, 660);")

我在找到元素后放了一个.click(),因为我认为可能需要单击以关注“喜欢列表”,并且实际上使滚动发生了。但是现在又出现了另一个问题:无论我输入y cood的值如何,每个循环仅向下滚动1个喜欢的人,而在第5个循环时,它失败了,因为它将单击从顶部开始计数的第6个喜欢的人,导致到第6个赞者的个人资料页面。

我已经在这个滚动问题上停留了将近一个星期。我在Google上搜索并阅读了很多人的类似问题,但找不到一个有帮助的问题。非常感谢任何可以提供帮助的人。

python selenium selenium-webdriver instagram infinite-scroll
1个回答
0
投票

我不确定您要寻找的是什么,但这是当我们遇到滚动问题时在Java中尝试过的方法。该元素不会自动滚动到视图中,并且会滚动设置数量的对象,因此我们在下面的代码中编写了代码

   public static void scrollintoView(WebDriver driver, String Value) throws 
   InterruptedException {

    int totalAttempts = 30;

    while (totalAttempts > 0) { 

        totalAttempts = totalAttempts-1;


        try { // checks code for exceptions

            WebElement ele=  driver.findElement(By.xpath(Value));

            break; // if no exceptions breaks out of loop
        } 
        catch (org.openqa.selenium.NoSuchElementException e) { 

            JavascriptExecutor executor = (JavascriptExecutor) driver;
            executor.executeScript("window.scrollBy(0, 300)");


          continue; // continues to loop if exception is found

        }}

    }

您可以在python中尝试类似的操作,硬滚动可以设置每次滚动时要检查的用户数。让我知道这是否有帮助

© www.soinside.com 2019 - 2024. All rights reserved.