如何使用Selenium选择弹出提示的元素

如何使用Selenium选择弹出提示的元素,selenium,selenium-chromedriver,Selenium,Selenium Chromedriver,我正在编写一个使用Selenium和Chromedriver远程控制instagram的代码 我已成功登录到该平台,但一旦我登录,就会出现一个询问激活通知的弹出窗口,我的代码流中断,因为它无法再单击instagram页面的元素 这是我尝试使用的代码(在登录时单击“发送”按钮时有效) (因为它是web代码中按钮的第一个实例,所以应该自动选择该按钮) 但是这次浏览器卡住了,什么也不做 在登录过程中,我遇到了一个问题,即它无法单击其中任何一个,并发现这是因为在请求转到instagram登录页面和加载页

我正在编写一个使用Selenium和Chromedriver远程控制instagram的代码

我已成功登录到该平台,但一旦我登录,就会出现一个询问激活通知的弹出窗口,我的代码流中断,因为它无法再单击instagram页面的元素

这是我尝试使用的代码(在登录时单击“发送”按钮时有效)

(因为它是web代码中按钮的第一个实例,所以应该自动选择该按钮)

但是这次浏览器卡住了,什么也不做

在登录过程中,我遇到了一个问题,即它无法单击其中任何一个,并发现这是因为在请求转到instagram登录页面和加载页面以便找到CSS元素之间存在延迟。我通过添加

time.sleep(2) 
在输入数据并修复之前,我认为类似的东西会在这里工作,因为它不会立即加载,但没有任何区别

这是选择器的问题吗,比如我可以使用xpath来绕过它吗?不管怎样,如果它有点模糊,请随时询问我的代码或其他问题

notifBtn= self.browser.find_element_by_css_selector('button')
notifBtn.click()

我希望Chromedriver在弹出窗口中单击“不激活”,这样代码就可以继续了。我被卡在屏幕上了

您的
按css\u选择器查找元素
调用可能正在查找多个元素,不知道要单击哪个元素。我会在这里使用XPath,更明确地说明您要单击哪个按钮:

from selenium.webdriver.support import expected_conditions as EC


# Wait for button to exist
not_now_button = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.XPATH, "//button[text()='Not Now']")))

# Click the button
not_now_button.click()

如果没有您正在测试的页面的任何上下文,很难知道这里出了什么问题。如果您可以在页面上发布一些HTML,包括您尝试单击的按钮,以及您遇到的警告页面的屏幕截图,这将是一个很好的开始。我通常使用prefs禁用通知…类似这样:prefs.put(“profile.default\u content\u setting\u values.notifications”,2);chromeoptions.setExpericalOption(“prefs”,prefs);新的“setUnhandledPromptBehavior”选项也可能起作用…:options.setUnhandledPromptBehavior(promptBehaviorConstant);您可以使用以下常量:UnexpectedAlertBehaviour.disease、UnexpectedAlertBehaviour.ACCEPT、UnexpectedAlertBehaviour.IGNORE。(或引发异常的选项…)使用WebDriverWait也比使用sleep要好。@Christine谢谢,这是HTML的链接和屏幕截图@pcalkins谢谢!这是个好主意,我没有想过完全避免通知。我会尝试一下。
from selenium.webdriver.support import expected_conditions as EC


# Wait for button to exist
not_now_button = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.XPATH, "//button[text()='Not Now']")))

# Click the button
not_now_button.click()