自动化浏览器操作-单击“提交"按钮错误-“单击成功,但加载失败. .." [英] Automate browser actions - Clicking the submit button errors - "Click succeeded but Load Failed. .."

查看:107
本文介绍了自动化浏览器操作-单击“提交"按钮错误-“单击成功,但加载失败. .."的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试编写一个代码,该代码自动登录到两个网站并转到某个页面.我使用 Splinter .

I'm trying to write a code that automatically logs into two websites and goes to a certain page. I use Splinter.

我仅在使用 PhantomJS 作为浏览器类型的"Mijn ING Zakelijk"网站上遇到错误.

I only get the error with the "Mijn ING Zakelijk" website using PhantomJS as browser type.

直到几天前,该代码在20次运行中有20次运行良好.但是,从今天开始,我遇到了一个错误.有时代码可以正常运行.其他时候没有,并给我单击成功,但加载失败.."的错误.这是完整的追溯:

Until a few days ago the code ran perfectly fine 20 out of 20 times. But since today I'm getting an error. Sometimes the code runs fine. Other times it does not and gives me the "Click succeeded but Load Failed.." error. Here's the full traceback:

## Attempting to login to Mijn ING Zakelijk, please wait.
- Starting the browser..
- Visiting the url..
- Filling the username form with the defined username..
- Filling the password form with the defined password..
- Clicking the submit button..
Traceback (most recent call last):
  File "/Users/###/Dropbox/Python/Test environment 2.7.3/Splinter.py", line 98, in <module>
    mijning()
  File "/Users/###/Dropbox/Python/Test environment 2.7.3/Splinter.py", line 27, in mijning
    attemptLogin(url2, username2, password2, defined_title2, website_name2, browser_type2)
  File "/Users/###/Dropbox/Python/Test environment 2.7.3/Splinter.py", line 71, in attemptLogin
    browser.find_by_css('.submit').first.click()
  File "/Users/###/Library/Python/2.7/lib/python/site-packages/splinter/driver/webdriver/__init__.py", line 344, in click
    self._element.click()
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/selenium/webdriver/remote/webelement.py", line 54, in click
    self._execute(Command.CLICK_ELEMENT)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/selenium/webdriver/remote/webelement.py", line 228, in _execute
    return self._parent.execute(command, params)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 165, in execute
    self.error_handler.check_response(response)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 158, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: u'Error Message => \'Click succeeded but Load Failed. Status: \'fail\'\'\n caused by Request => {"headers":{"Accept":"application/json","Accept-Encoding":"identity","Connection":"close","Content-Length":"81","Content-Type":"application/json;charset=UTF-8","Host":"127.0.0.1:56899","User-Agent":"Python-urllib/2.7"},"httpVersion":"1.1","method":"POST","post":"{\\"sessionId\\": \\"c2bbc8a0-e3d2-11e2-b7a8-f765797dc4e7\\", \\"id\\": \\":wdc:1372850513087\\"}","url":"/click","urlParsed":{"anchor":"","query":"","file":"click","directory":"/","path":"/click","relative":"/click","port":"","host":"","password":"","user":"","userInfo":"","authority":"","protocol":"","source":"/click","queryKey":{},"chunks":["click"]},"urlOriginal":"/session/c2bbc8a0-e3d2-11e2-b7a8-f765797dc4e7/element/%3Awdc%3A1372850513087/click"}' ; Screenshot: available via screen 

Process finished with exit code 1

这是完整的代码:

## *** Payment Notification and Mail Tool (FPNMT) ##
from splinter import *
from Tkinter import *

def ###():

    # Define values
    browser_type1 = 'phantomjs' # 'phantomjs' or 'firefox'
    url1 = 'http://###.nl/admin'
    username1 = '###'
    password1 = '###'
    defined_title1 = 'Bestellingen'
    website_name1 = '###.nl Admin'

    attemptLogin(url1, username1, password1, defined_title1, website_name1, browser_type1)

def mijning():

    # Define values
    browser_type2 = 'phantomjs' # 'phantomjs' or 'firefox'
    url2 = 'https://mijnzakelijk.ing.nl/internetbankieren/SesamLoginServlet'
    username2 = '###'
    password2 = '###'
    defined_title2 = 'Saldo informatie'
    website_name2 = 'Mijn ING Zakelijk'

    attemptLogin(url2, username2, password2, defined_title2, website_name2, browser_type2)

# Functions #
def attemptLogin(url, username, password, defined_title, website_name, browser_type):
    print '## Attempting to login to ' + website_name + ', please wait.'

    # Start the browser
    print '- Starting the browser..'
    browser = Browser(browser_type)

    # Visit in the url
    print '- Visiting the url..'
    browser.visit(url)

    if website_name == '###.nl Admin':
        # Find the username form and fill it with the defined username
        print '- Filling the username form with the defined username..'
        browser.fill('username', username)

        # Find the password form and fill it with the defined password
        print '- Filling the password form with the defined password..'
        browser.fill('password', password)

        # Find the submit button and click
        print '- Clicking the submit button..'
        browser.click_link_by_text('Inloggen')

        # Find, click and display page with order history
        print '- Visiting the defined web page..'
        current_token = browser.url[57:97]
        url_plus_token = 'http://www.###.nl/admin/index.php?route=sale/order' + current_token
        browser.visit(url_plus_token)

    else:
        website_name == 'Mijn ING Zakelijk'
        # Find the username form and fill it with the defined username
        print '- Filling the username form with the defined username..'
        browser.find_by_id('gebruikersnaam').first.find_by_tag('input').fill(username)

        # Find the password form and fill it with the defined password
        print '- Filling the password form with the defined password..'
        browser.find_by_id('wachtwoord').first.find_by_tag('input').fill(password)

        # Find the submit button and click
        print '- Clicking the submit button..'
        browser.find_by_css('.submit').first.click()

        # Display page with transaction history
        print '- Visiting the defined web page..'
        browser.visit('https://mijnzakelijk.ing.nl/mpz/solstartpaginarekeninginfo.do')

    # Get page title after successful login
    current_title = browser.title

    # Check the title of the page to confirm successful login
    checkLogin(defined_title, current_title, website_name, browser)

def checkLogin(defined_title, current_title, website_name, browser):
    if current_title == defined_title:
        print '# Login to', website_name, 'successful.'
        print '- Quitting the browser..'
        browser.quit()

    else:
        print '# Login to', website_name, 'failed.'
        print '- Quitting the browser..'
        browser.quit()

i = 1
while i < 10:
    print i
    #***()
    mijning()
    i = i+1

关于导致此错误的原因以及如何解决此问题的任何想法?

Any ideas on what's causing this error and how do I solve it?

谢谢.

推荐答案

页面上可能已经有一些活动的javascript或背景AJAX,这使PhantomJS误以为按钮单击不成功.您可以尝试插入等待",也可以尝试在单击之前停止浏览器.

It may be that there was already some active javascript or background AJAX on the page, which confused PhantomJS into thinking that button click was unsuccessful. You could try inserting wait or try to stop the browser before clicking.

这篇关于自动化浏览器操作-单击“提交"按钮错误-“单击成功,但加载失败. .."的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆