如何通过 Selenium 和 Python 点击 Instagram 中的“现在不”按钮

问题描述 投票:0回答:7

我正在尝试使用我当前正在编码的“Instagram 机器人”登录 Instagram。我已经通过了登录屏幕、“获取应用程序”屏幕以及它想要如何打开通知。两个选项是“打开”和“现在不打开”。我试图使用与以前相同的方法来单击“现在不”,但它不起作用。代码(在 Firefox 上使用检查元素)说

<button class="aOOlW   HoLwm " tabindex="0">Not Now</button>

我尝试使用类代码

notNowButton = driver.find_element_by_xpath("//a[@class='aOOlW HoLwm']")
# or
notNowButton = driver.find_element_by_xpath("//a[@tabindex='0']")

但这也行不通。有什么帮助吗?

通知:

enter image description here

python selenium xpath css-selectors instagram
7个回答
2
投票

使用

WebDriverWait
和 Xpath 匹配文本
Not Now

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait 

notNowButton = WebDriverWait(driver, 15).until(
    lambda d: d.find_element_by_xpath('//button[text()="Not Now"]')
)
notNowButton .click()

1
投票

所以这在某种程度上对我有用。我已经测试了大约10次,但这可能不是最好的方法。

#we just set a simple sleep time.it's not complicated we just wait for 5 seconds to make sure the page is fully loaded
sleep(5)
#since it's a button we just write //button and then it has to search for the described class which in this scenario it is aOOlW   HoLwm and then it just clicks on it
not_now_notif=browser.find_element_by_xpath("//button[@class='aOOlW   HoLwm ']")

not_now_notif.click()

顺便说一句,你可以在这里查看。我相信这也可能有帮助 https://www.edureka.co/community/575/need-wait-until-page-completely-loaded-selenium-webdriver


0
投票

看来你们已经很接近了。

在您的第一次代码试用中:

driver.find_element_by_xpath("//a[@class='aOOlW HoLwm']")

<tag>
不是
<a>
标签,而是
<button>
标签。因此,按以下方式更改它会起作用。

driver.find_element_by_xpath("//button[@class='aOOlW   HoLwm ']")

现在所需的元素是JavaScript启用的元素,因此您必须诱导WebDriverWait才能使元素可点击,并且以下行将完美工作:

WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//button[@class='aOOlW   HoLwm ']"))).click()

作为替代方案,您也可以使用 cssSelector,如下所示:

WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button.aOOlW.HoLwm"))).click()

注意:您必须添加以下导入:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

0
投票
browser = webdriver.Chrome('/Users/username/Documents/WebDriver/chromedriver')


browser.find_elements_by_xpath("//button[contains(text(), 'Not Now')]")[0].click()

0
投票

您必须首先使用复制CSS选择器来复制路径

Notnow = driver.find_element_by_css_selector("body > div.RnEpo.Yx5HN > div > div > div.mt3GC > button.aOOlW.HoLwm")

Notnow.click()

0
投票

首先,通过文本找到元素并将其分配给

not_now_button
:

not_now_button = driver.find_element_by_xpath("//*[text()='Not Now']")

然后点击按钮:

not_now_button.click()

0
投票
driver = webdriver.Chrome(chrome_options)
driver.get("https://www.instagram.com/")

time.sleep(2)
email_enter = driver.find_element(By.CSS_SELECTOR, "input[aria- 
label='Phone number, username or email address']")
email_enter.send_keys(os.getenv("email"))

password_enter = driver.find_element(By.CSS_SELECTOR, "input[aria- 
label='Password']")
password_enter.send_keys(os.getenv("password"))

time.sleep(2)
log_in = driver.find_element(By.CSS_SELECTOR, "button[type='submit']")
log_in.click()

time.sleep(5)
not_now = driver.find_element(By.CSS_SELECTOR,"div[role='button']")
not_now.click()
© www.soinside.com 2019 - 2024. All rights reserved.