使用 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
Python Selenium Exception AttributeError: "'Service' object has no attribute 'process'" in