使用 Selenium 和 Python 在 Instagram 通知中单击“现在不”

Posted

技术标签:

【中文标题】使用 Selenium 和 Python 在 Instagram 通知中单击“现在不”【英文标题】:Click ''Not now" on Instagram notifications ask using Selenium and Python 【发布时间】:2018-11-30 18:38:28 【问题描述】:

我编写了一个脚本,可以成功登录 Instagram。 当我应该在家里使用我的帐户时,网站会显示一个弹出窗口,询问您是否需要通知。 在这一点上,我尝试了很多解决方案,但我一无所获。 我只是希望,当显示弹出窗口时,脚本应该点击“Not now”。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time


ids = []

driver = webdriver.Chrome(executable_path = '/usr/local/bin/chromedriver')
driver.get("https://www.instagram.com/accounts/login/?source=auth_switcher")


usm = driver.find_element_by_name('username').send_keys("**")
pwd = driver.find_element_by_name('password').send_keys("**")
btnLog = driver.find_element_by_tag_name('form').submit()

acpt = driver.find_element_by_xpath("//*[contains(@class, 'aOOlW   HoLwm ')]")

在图像中,突出显示了我要单击的按钮行:

【问题讨论】:

您能否向我们提供错误的登录信息? 【参考方案1】:

为此尝试以下代码:

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


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

PS:我在点击之前使用了 10 秒等待元素可点击。

希望对你有帮助!

【讨论】:

我试过你的代码,它成功了! :D 但我是 selenium 的初学者,我不太了解你的代码......代码行说驱动程序必须参加 10(毫秒?)直到类的元素 '.aOOlW.HoLwm ' 准备好被点击了吗? EC (expected_conditions) 的准确功能是什么?感谢您的宝贵时间 还有,首先,为什么你对司机说它应该等到元素可点击,而你没有直接使用函数('find_element_by..')? 因为有时需要时间来确定页面上元素的存在、可见性或可点击性(等等)。简而言之,页面应该在与它交互之前加载。【参考方案2】:

要在 Instagram 弹出通知中将文本设为 Not now 的元素上的 click(),您可以使用以下解决方案:

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

options = Options()
options.add_argument("start-maximized")
options.add_argument("disable-infobars")
options.add_argument("--disable-extensions")
driver = webdriver.Chrome(chrome_options=options, executable_path=r'C:\WebDrivers\chromedriver.exe')
driver.get("https://www.instagram.com/accounts/login/?source=auth_switcher")
driver.find_element_by_name('username').send_keys("Giacomo")
driver.find_element_by_name('password').send_keys("Maraglino")
driver.find_element_by_tag_name('form').submit()
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[contains(.,'Non ora')]"))).click()

【讨论】:

【参考方案3】:

只需将点击添加到 acpt,如下所示:

acpt = driver.find_element_by_xpath("//*[contains(@class, 'aOOlW   HoLwm ')]")
acpt.click()

【讨论】:

以上是关于使用 Selenium 和 Python 在 Instagram 通知中单击“现在不”的主要内容,如果未能解决你的问题,请参考以下文章

How to click on a point on an HTML5 canvas in Python selenium webdriver

python3+selenium3遇到的问题:Exception ignored in: <bound method Service.__del__ of <selenium.webdri

使用selenium处理python中的多个选项卡时的IndexError

使用selenium for python从文件夹导入文件

Python Selenium Exception AttributeError: "'Service' object has no attribute 'process'" in

在Python IDLE 中输入from selenium import webdriver就会报错