Python Selenium:单击 Instagram 下一个 post 按钮

Python Selenium: Click Instagram next post button

我正在创建一个 Instagram 机器人,但不知道如何导航到下一个 post。
这是我试过的

#Attempt 1
next_button = driver.find_element_by_class_name('wpO6b  ')
next_button.click()

#Attempt 2 
_next = driver.find_element_by_class_name('coreSpriteRightPaginationArrow').click()

两个都没有用,我得到了 NoSuchElementExceptionElementClickInterceptedException 。我需要在此处进行哪些更正?

这是我要单击的按钮(以转到下一个 post)

如下图所示,wp06b 按钮在很多 div 中,在这种情况下,您可能需要给 Selenium 相同的 div 路径才能访问按钮或给它一个 XPath.

它不是最优化的,但应该可以正常工作。

driver.find_element(By.XPATH("(.//*[normalize-space(text()) and normalize-space(.)='© 2022 Instagram from Meta'])[1]/following::*[name()='svg'][2]")).click()

请注意 XPath 指向 svg,所以基本上我们是在点击 svg 元素本身,而不是在按钮中。

我已经检查了您的 class 名称 coreSpriteRightPaginationArrow,但我找不到具有确切 class 名称的任何元素。但是我部分地看到了 class 名称。因此,如果您尝试使用 XPath 包含如下所示,它可能会有所帮助。

//div[contains(@class,'coreSpriteRight')]

另一个使用 class wpO6b 的 xpath。有 10 个元素具有相同的 class 名称,因此使用 @aria-label='Next'

进行过滤
//button[@class='wpO6b  ']//*[@aria-label='Next']

试试这些,如果有效请告诉我。

我试过下面的代码,它点击下一步按钮 10 次

import time
from selenium import webdriver
from selenium.webdriver.common.by import By

if __name__ == '__main__':
    driver = webdriver.Chrome('/Users/yosuvaarulanthu/node_modules/chromedriver/lib/chromedriver/chromedriver')  # Optional argument, if not specified will search path.
    driver.maximize_window()
    driver.implicitly_wait(15)
    
    driver.get("https://www.instagram.com/instagram/");
    time.sleep(2)
    driver.find_element(By.XPATH,"//button[text()='Accept All']").click();
    time.sleep(2)
    #driver.find_element(By.XPATH,"//button[text()='Log in']").click();
    driver.find_element(By.NAME,"username").send_keys('username')
    driver.find_element(By.NAME,"password").send_keys('password')
    driver.find_element(By.XPATH,"//div[text()='Log In']").click();
    driver.find_element(By.XPATH,"//button[text()='Not now']").click();

    driver.find_element(By.XPATH,"//button[text()='Not Now']").click();
    #it open Instagram page and clicks 1st post and then it will click next post button for the specified range
    driver.get("https://www.instagram.com/instagram/");
    driver.find_element(By.XPATH,"//div[@class='v1Nh3 kIKUG  _bz0w']").click();
    

    for page in range(1,10):
        driver.find_element(By.XPATH,"//button[@class='wpO6b  ']//*[@aria-label='Next']" ).click();
        time.sleep(2)
    driver.quit() 

如您所见,下一个 post 右箭头按钮元素定位器在第一个 post 和其他 post 下一页按钮之间变化。
如果是第一个 post 你应该使用这个定位器:

//div[contains(@class,'coreSpriteRight')]

而对于所有其他 post,您应该使用此定位器

//a[contains(@class,'coreSpriteRight')]

第二个元素 //a[contains(@class,'coreSpriteRight')] 也将出现在第一个 post 页面上,但是该元素在那里不可点击,它已启用并且只能在非第一页上点击。