python browser.find_element_by_name('submit')中的selenium。click()无效

时间:2017-08-28 21:40:11

标签: python selenium selenium-webdriver webdriver

我正在试图抓住一个需要登录信息的网站,并且在数小时试图弄清楚为什么我一直“登录失败”之后,我认为这仅仅是因为“登录”或“提交”按钮是实际上没有点击。我通过在“失败”时保存浏览器的屏幕截图来实现这一点。我的用户名和密码填写在字段中。

我尝试了waitelementScrollBehavior等内容,似乎没有任何效果。我真的很感激这方面的一些帮助!代码如下。

def load(self):
    global browser

    DesiredCapabilities.PHANTOMJS["elementScrollBehavior"] = 1
    #browser field
    browser = webdriver.PhantomJS()
    wait = WebDriverWait(browser, 10)
    #browser = webdriver.Firefox()
    #browser = webdriver.Chrome()

    loginId = self.id
    password = self.pw
    browser.get('https://link.example.com')
    browser.find_element_by_id('cf-login').send_keys(loginId)
    browser.find_element_by_id('password').send_keys(password)
    browser.find_element_by_name('submit').click()
    #wait.until(EC.presence_of_element_located((By.ID, "crefli_HC_SSS_STUDENT_CENTER")))
    try:
        if browser.find_element_by_id('crefli_HC_SSS_STUDENT_CENTER'):
            #return login status
            return True
        else:
            return False
    except:
        print('element not found on page')
        print(browser.current_url)
        #browser.save_screenshot('~/Desktop/screen2.png')

表格的HTML:

    <form name="loginform" action="/oam/server/auth_cred_submit" method="post">

<div class="nonfloat-box">
Username:
<input type="text" id="cf-login" name="username" class="username inputbox" autocomplete="OFF">
</div>

<div class="float-box">
Password:
<input id="password" name="password" type="password" class="password inputbox" autocomplete="OFF">
</div>
<input type="image" src="https://www.cuny.edu/site/citizencuny/cunyfirst-login/loginbutton.jpg" onclick="javascript: return signon_validate()" alt="Submit" name="submit">
</form>

我相信我需要得到一些javascript才能运行。但是怎么样?

更新:Selenium有一个submit()方法,可以自动提交HTML中的<form>。即使使用它,它也不起作用。正如您在HTML中看到的那样,它是一种形式。在这一点上,我不知道还有什么可以尝试。

6 个答案:

答案 0 :(得分:0)

HTML需要做出更准确的决定,但我通常使用回车键提交表单,有时javascript会混淆通过点击提交的功能,而简单的输入通常可以解决问题

from selenium.webdriver.common.keys import Keys


def load(self):
(...)
   browser.find_element_by_id('password').send_keys(password)
   browser.find_element_by_id('password').send_keys(Keys.ENTER)
(...)

否则,请确保您的意思是find_element_by_name而不是find_element_by_tag_name

答案 1 :(得分:0)

我感觉'submit'找不到find_element_by_name。试试find_element_by_xpath(//*[@name='submit'])

答案 2 :(得分:0)

当你使用硒做自动测试或刮擦时,我建议你使用meth方法

webdriver.find_element_by_xpath(xpathString)  

因为您可以检查xpathwebbroser的控制台 在控制台上尝试此命令:

$x('xpathStrin')

答案 3 :(得分:0)

使用xpath,请尝试此

//input[@name='submit']

//input[contains(@name,'submit')AND contains(@alt,'Submit')]

答案 4 :(得分:0)

您可以使用submit()提交表单。需要将其发送到<form>代码

browser.find_element_by_id('cf-login').send_keys(loginId)
browser.find_element_by_id('password').send_keys(password)
browser.find_element_by_name('loginform').submit()

如果这不起作用,您可以使用JavaScript点击作为解决方法

submit = browser.find_element_by_name('submit')
browser.execute_script("arguments[0].click();", submit)

您也可以尝试发送Enter

from selenium.webdriver.common.keys import Keys

browser.find_element_by_id('cf-login').send_keys(loginId)
password_field = browser.find_element_by_id('password')
password_field.send_keys(password)

password_field.send_keys(Keys.RETURN)
#OR
password_field.send_keys(Keys.ENTER)

答案 5 :(得分:0)

请试试这个,希望有所帮助

from selenium.webdriver.common.keys import Keys

driver.find_element_by_name('submit').send_keys(Keys.RETURN)
                 (or)
driver.find_element_by_name('submit').send_keys(Keys.ENTER)