【问题标题】:Python Selenium: Click Instagram next post buttonPython Selenium:单击 Instagram 下一个帖子按钮
【发布时间】:2022-01-07 11:50:03
【问题描述】:

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

#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 。我需要在此处进行哪些更正?

这是我试图点击的按钮(进入下一篇文章)

【问题讨论】:

    标签: python selenium selenium-webdriver xpath


    【解决方案1】:

    我检查了您的类名 coreSpriteRightPaginationArrow,但找不到具有该确切类名的任何元素。但我部分看到了类名。因此,如果您尝试使用 XPath contains 可能会有所帮助,如下所示。

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

    另一个使用 wpO6b 类的 xpath。使用 @aria-label='Next' 过滤了 10 个具有相同类名的元素

    //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() 
    

    【讨论】:

    • 你的意思是像driver.find_element(By.XPATH,"//button[@class='wpO6b ']//*[@aria-label='Next']" ).click() ;我收到 NoSuchElementException 错误
    • 我添加了正在运行的示例代码。请看一下
    【解决方案2】:

    如您所见,下一篇文章右箭头按钮元素定位器在第一篇文章和其他文章下一页按钮之间发生变化。
    如果是第一篇文章,您应该使用此定位器:

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

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

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

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

    【讨论】:

    • driver.find_element(By.XPATH,("//a[contains(@class,'coreSpriteRight')]")) 我收到 NoSuchElementException 错误
    • 您可能错过了在此之前的延迟。请在帖子中分享您的所有相关代码
    【解决方案3】:

    如下图所示,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 元素本身,而不是按钮。

    【讨论】:

    • 这从第二个帖子开始有效,但不是第一个。
    • 对于第一个按钮,试试这个 XPath:/html/body/div[6]/div[1]/div/div/div/button/div/span/svg
    猜你喜欢
    • 2018-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-18
    • 1970-01-01
    相关资源
    最近更新 更多