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()
两个都没有用,我得到了 NoSuchElementException
或 ElementClickInterceptedException
。我需要在此处进行哪些更正?
这是我要单击的按钮(以转到下一个 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 页面上,但是该元素在那里不可点击,它已启用并且只能在非第一页上点击。
我正在创建一个 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()
两个都没有用,我得到了 NoSuchElementException
或 ElementClickInterceptedException
。我需要在此处进行哪些更正?
这是我要单击的按钮(以转到下一个 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 页面上,但是该元素在那里不可点击,它已启用并且只能在非第一页上点击。