Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Selenium with PhantomJS:表单正在验证但未提交_Javascript_Selenium_Web Crawler_Phantomjs_Screen Scraping - Fatal编程技术网

Javascript Selenium with PhantomJS:表单正在验证但未提交

Javascript Selenium with PhantomJS:表单正在验证但未提交,javascript,selenium,web-crawler,phantomjs,screen-scraping,Javascript,Selenium,Web Crawler,Phantomjs,Screen Scraping,我在通过SeleniumWebDriver的PhantomJSAPI提交表单时遇到了一个奇怪的问题。单击submit按钮后,表单将被验证(用户名和密码是否太短,或是否为空等),但它不会最终被提交。也就是说,如果我提交了一个无效的表单,并检查了屏幕截图,就会出现警报通知。如果我提交了一份有效的表格,什么都不会发生。页面上的JS应该验证表单,然后在单击submit按钮时提交表单 有几项排除。我在submit按钮上尝试了。单击()和。提交(),这是一个按钮元素。我还在表单本身和表单中的任意元素(如密码

我在通过SeleniumWebDriver的PhantomJSAPI提交表单时遇到了一个奇怪的问题。单击submit按钮后,表单将被验证(用户名和密码是否太短,或是否为空等),但它不会最终被提交。也就是说,如果我提交了一个无效的表单,并检查了屏幕截图,就会出现警报通知。如果我提交了一份有效的表格,什么都不会发生。页面上的JS应该验证表单,然后在单击submit按钮时提交表单

有几项排除。我在submit按钮上尝试了
。单击()
。提交()
,这是一个按钮元素。我还在表单本身和表单中的任意元素(如密码)上尝试了
.submit()
,这是Selenium允许的

事实上,如果我驾驶的是Firefox而不是PhantomJS,同样的代码也可以正常工作。不过,我不想切换,因为Firefox速度较慢,给我带来了无法预知的连接问题

我的规格:我在Ubuntu 14.04 LTS(GNU/Linux 3.17.1-elastic x86_64)上通过Python 2.7使用硒版本1.43和PhantomJS 1.98

代码如下。首先是我的Selenium代码。然后是表单的html。然后从站点下载login.js源代码。我认为js中发生的事情是,出于某种原因,
.validate
函数中的
invalidHandler
正在运行,但是
submitHandler
没有运行?提前感谢您的关注

# enter username and password up here first
submitEl = self.find_element_by_css_selector("button[type='submit']")
submitEl.click()
self.save_screenshot('login_submission.png')
Edit2:“self”是从
Webdriver.PhantomJS
类继承的驱动程序对象。现在,表单html:

            <form class="form-login" action="" name="login" method="POST">
                <div class="errorHandler alert alert-danger no-display">
                    <i class="fa fa-remove-sign"></i> You have some form errors. Please check below.
                </div>
                                    <fieldset>
                    <div class="form-group">
                        <span class="input-icon">
                            <input type="text" class="form-control" name="username" placeholder="Username">
                            <i class="fa fa-user"></i> </span>
                    </div>
                    <div class="form-group form-actions">
                        <span class="input-icon">
                            <input type="password" class="form-control password" name="password" placeholder="Password">
                            <i class="fa fa-lock"></i>
                            <a class="forgot" href="forgot.php">
                                I forgot my password
                            </a> </span>
                    </div>
                    <div class="form-group">
                    <img src="captcha/captcha.php" alt="captcha" />
                        <span class="input-icon" style="width:200px; float: right;">
                            <input type="text" class="form-control" name="captcha">
                            <i class="fa fa-key"></i> </span>
                    </div>
                    <div class="form-actions" ><div class="slideExpandUp">
                        <label for="remember" class="checkbox-inline">
                            <input type="checkbox" class="grey remember" id="remember" name="remember">
                            Keep me signed in
                        </label>
                        <button type="submit" class="btn btn-bricky pull-right" name="submit">
                            Login <i class="fa fa-arrow-circle-right"></i>
                        </button></div>
                    </div>
                    <div class="new-account">
                        Don't have an account yet?
                        <a href="register.php" class="register">
                            Create an account
                        </a>
                    </div>
                </fieldset>
            </form>
编辑:修复了标题

PhantomJS日志文件输出,按请求:

PhantomJS is launching GhostDriver...
[INFO  - 2015-01-27T16:58:04.367Z] GhostDriver - Main - running on port 48152
[INFO  - 2015-01-27T16:58:05.366Z] Session [a9641420-a645-11e4-95fd-c78c9ec356b6] - page.settings - {"XSSAuditingEnabled":false,"javascriptCanCloseWindows":true,"javascriptCanOpenWindows":true,"javascriptEnabled":true,"loadImages":true,"localToRemoteUrlAccessEnabled":false,"userAgent":"Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0","webSecurityEnabled":true}
[INFO  - 2015-01-27T16:58:05.366Z] Session [a9641420-a645-11e4-95fd-c78c9ec356b6] - page.customHeaders:  - {}
[INFO  - 2015-01-27T16:58:05.366Z] Session [a9641420-a645-11e4-95fd-c78c9ec356b6] - Session.negotiatedCapabilities - {"browserName":"phantomjs","version":"1.9.8","driverName":"ghostdriver","driverVersion":"1.1.0","platform":"linux-unknown-64bit","javascriptEnabled":true,"takesScreenshot":true,"handlesAlerts":false,"databaseEnabled":false,"locationContextEnabled":false,"applicationCacheEnabled":false,"browserConnectionEnabled":false,"cssSelectorsEnabled":true,"webStorageEnabled":false,"rotatable":false,"acceptSslCerts":false,"nativeEvents":true,"proxy":{"proxyType":"direct"},"phantomjs.page.settings.userAgent":"Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0"}
[INFO  - 2015-01-27T16:58:05.366Z] SessionManagerReqHand - _postNewSessionCommand - New Session Created: a9641420-a645-11e4-95fd-c78c9ec356b6
[ERROR - 2015-01-27T16:59:08.083Z] WebElementLocator - _handleLocateCommand - Element(s) NOT Found: GAVE UP. Search Stop Time: 1422377948079

结尾的
错误
不是我的问题的一部分,但更像是一本书的结尾。当抓取算法查找登录后显示的页面上的链接时,就会发生这种情况。由于我们没有成功提交登录表单,该链接自然不存在

我不确定是哪些更改导致了突破,但我可以说我添加了以下代码。编辑:其中只有两个是新的。删除了一个

    webdriver.DesiredCapabilities.PHANTOMJS["phantomjs.page.settings.localToRemoteUrlAccessEnabled"] = True
    webdriver.DesiredCapabilities.PHANTOMJS["phantomjs.page.settings.browserConnectionEnabled"] = True
我提交了表单本身,而不是单击按钮(在更改上述配置之前,我也尝试过这样做)


phantomjsdriver.log说了什么?不幸的是,不太清楚,但我将在问题的底部添加它。实际上,我现在看到一个关于jQuery的错误:“ReferenceError:找不到变量:jQuery。”这可能是问题的一部分吗?如果没有访问您的站点,我所能提供的只是:打开调试技能,祝你好运。还有一个想法:你尝试过不同的定位策略吗?评论一下其中的几行,看看哪一行才是真正的交易。请尝试多种组合。这可能会揭示实际发生的情况,而不仅仅是如何用锤子解决问题。
    webdriver.DesiredCapabilities.PHANTOMJS["phantomjs.page.settings.localToRemoteUrlAccessEnabled"] = True
    webdriver.DesiredCapabilities.PHANTOMJS["phantomjs.page.settings.browserConnectionEnabled"] = True
        formEl = self.find_element_by_css_selector("form[name='login']")
        formEl.submit()