如何从该函数内部访问函数名?
// parasitic inheritance
var ns.parent.child = function() {
var parent = new ns.parent();
parent.newFunc = function() {
}
return parent;
}
var ns.parent = function() {
// at this point, i want to know who the child is that called the parent
// ie
}
var obj = new ns.parent.child();
Run Code Online (Sandbox Code Playgroud) 我似乎无法做一个简单的表单提交.
以下是我向Google搜索表单提交"测试"并打印结果的代码.
var url = 'http://www.google.com/',
page = new WebPage();
page.open(url, function(status) {
if (status !== 'success')
{
console.log('Unable to access network');
phantom.exit();
return;
}
else
{
page.includeJs("//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js", function() {
page.evaluate(function() {
$('#gbqfq').val("Test");
$("#gbqfba").click();
});
page.render('google.png');
phantom.exit();
});
}
});
Run Code Online (Sandbox Code Playgroud)
任何人都可以告诉我如何做到这一点?我在这里和其他地方环顾四周,但似乎没有任何效果.
我在PhantomJS中运行jQuery时遇到问题.我找到了这个答案,其中讨论了在evaluate函数中没有可用的变量,但问题是关于节点模块,在我的例子中我只调用console.logevaluate函数.我也把这个问题放在了GitHub上.
以前,对于某些页面,以下evaluate代码未执行.现在@ b1f56gd4已经提供了一些帮助,它现在打印消息; 我无法执行它,但现在我可以看到:
https://login.yahoo.com/上的页面从http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js运行了不安全的内容.
我无法从不同的域加载jQuery,--local-to-remote-url-access=true或者--web-security=false选项没有区别.
我将尝试在本地加载jQuery.这是代码:
console.log('Loading a web page');
var url = 'https://login.yahoo.com/';
var page = require('webpage').create();
console.log('Setting error handling');
page.onConsoleMessage = function (msg) {
console.log(msg);
};
page.onError = function (msg, trace) {
console.log(msg);
trace.forEach(function(item) {
console.log(' ', item.file, ':', item.line);
})
phantom.exit();
}
console.log('Error handling is set');
console.log('Opening page');
page.open(url, function (status) {
if (status != 'success') {
console.log('F-' + status);
} …Run Code Online (Sandbox Code Playgroud) 我有一个非常简单的HTML表单,我试图用各种数据进行测试.我使用IE对象在MS Access/VBA中编写了一个原型概念验证.它工作正常,但完成的测试产品必须使用PhantomJS.我有页面连接工作,表格填充得很好.我被困的地方是让提交按钮开火.我已经梳理了SO并尝试了所有建议,但没有任何工作.我正在使用PhantomJS 1.9.7并使用直接的JavaScript测试脚本.
我尝试了各种JavaScript技术来触发提交按钮.为了满足"Just use JQuery"的用户群,我也试过了.什么都行不通.当我在测试脚本的末尾渲染表单时,我看到填充了数据的表单耐心地等待单击<search>按钮.
以下是我尝试过的摘要:
document.getElementById('btnSearch').click(); $("btnSearch").click(); var el = document.getElementById('btnSearch'); // Get search button object
$(el).click(); document.getElementById('Form1').submit();以下是表格:(并且请不要对缺少CSS,使用表格等进行评论/辩论.我对创建网站的人没有任何发言权或影响力.)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<HTML>
<HEAD>
<title>Da Site</title>
</HEAD>
<body>
<form name="Form1" method="post" action="Default.aspx" id="Form1">
<TABLE id="Table2" cellSpacing="2" cellPadding="1" border="0">
<TR>
<TD>Street Address:</TD>
<TD><input name="Address" type="text" maxlength="100" id="Address" /></TD>
</TR>
<TR>
<TD>City:</TD>
<TD><input name="City" type="text" maxlength="100" id="City" style="width:232px;"/></TD>
</TR>
<TR>
<TD>State:</TD>
<TD><select name="State" id="State">
<option value=""></option>
<option value="AL">AL - Alabama</option>
<option …Run Code Online (Sandbox Code Playgroud) 我熟悉PhantomJS.但我不能得到一件事.我有一个简单形式的页面:
<FORM action="save.php" enctype="multipart/form-data" method="GET" onSubmit="return doSubmit();">
<INPUT name="test_data" type="text">
<INPUT name="Submit" type="submit" value="Submit">
</FORM>
Run Code Online (Sandbox Code Playgroud)
并且save.php只记下test_data值
所以我这样做:
page.evaluate(function() {
document.forms[0].test_data.value="555";
doSubmit();
});
Run Code Online (Sandbox Code Playgroud)
渲染页面时,我看到文本字段是555,但表单没有提交,save.php没有记下test_data值.所以doSubmit()不执行,是吗?doSubmit()是一个简单的验证步骤,提交应该加载下一页.
所以问题是:如何使用PhantomJS在页面上执行javascript代码?