如何在Selenium 2 Python中捕获弹窗

1 投票
2 回答
3943 浏览
提问于 2025-04-17 10:49

我今晚刚开始使用Selenium 2,所以这部分内容会非常基础(希望如此...)。

我正在尝试登录我的账户,网址是 http://contentparadise.com/

我进入了登录页面 https://www.contentparadise.com/signin.aspx,可以输入我的账号和密码,然后提交。但是即使输入正确的账号和密码,它还是把我带回了登录页面,并弹出一个小消息框,上面写着“发生了以下错误”。显然,代码中的账号和密码是错误的,我想把这个当作错误来处理,但即使用我真实的账号和密码也会出现这个问题。

我该如何检测并读取这个消息框?为什么正确的账号和密码不让我进入主页呢?

我在另一个网站上使用相同的代码,输入正确的账号和密码,它就能正常带我进入主页。

这是不是因为登录页面使用了javascript?如果你查看登录页面的源代码,可以找一下字符串 "" 来找到表单的那部分。

以下是代码:

from selenium import webdriver
import sys
import os

userID = "wajahbaru"
pw = "marmalade"

wdrv = webdriver.Firefox()
wdrv.get("https://www.contentparadise.com/signin.aspx")

print "Page #1 title is: " + wdrv.title; # should be "Sign In"

unamefield = wdrv.find_element_by_name("ctl00$ContentPlaceHolder1$txtUserName").send_keys(userID)
pwdfield = wdrv.find_element_by_name("ctl00$ContentPlaceHolder1$txtPassword").send_keys(pw)
pwdfield = wdrv.find_element_by_name("ctl00$ContentPlaceHolder1$btnLogin").click()

print "Page #2 title is: " + wdrv.title; # if logged in this should be "Content Paradise: Buy or Sell Software, 2D Content, 3D Models and Audio."

wdrv.get_screenshot_as_file("test.jpg")
wdrv.quit()

2 个回答

1

我该如何检测和读取这个错误提示框?为什么正确的设置没有跳转到主页呢?

要检测错误提示框,你可以查找一个元素,那个元素的 id="error"

#!/usr/bin/env python
from contextlib import closing
from selenium.webdriver import Firefox as Browser
from selenium.webdriver.support.ui import WebDriverWait

timeout = 10 # seconds

with closing(Browser()) as browser:
    browser.get('https://www.contentparadise.com/signin.aspx')
    assert browser.title == "Sign In"
    login, password, submit = map(browser.find_element_by_id,
        ['ctl00_ContentPlaceHolder1_txtUserName',
         'ctl00_ContentPlaceHolder1_txtPassword',
         'ctl00_ContentPlaceHolder1_btnLogin'])
    enter_text = lambda x, text: (x.clear(), x.send_keys(text))
    enter_text(login, "abc")
    enter_text(password, "pas$W0rd")
    submit.click()

    # wait for error or success
    value = WebDriverWait(browser, timeout).until(
        lambda x: ("Content Paradise" in x.title and "ok" or
                   x.find_element_by_id('error')))
    if value != "ok":
       print "error:", value.text
    browser.get_screenshot_as_file('test.jpg')
0

在下面的链接中搜索“弹出对话框”……如果你想了解更多,可以把你找到的代码在谷歌上搜索一下,应该能找到一些不错的资料哦;-)

http://readthedocs.org/docs/selenium-python/en/latest/navigating.html?highlight=popup

撰写回答