我在PHP应用程序中执行了相当广泛的数据输入任务。该应用程序允许您一次输入一个数据集(名字,姓氏,电子邮件),单击“开始”,然后使用AJAX提交数据并空白表单,将光标放回第一个输入。我有一个1,300的数据集需要使用此方法输入。它目前在Excel文件中,但当然可以很容易地存在于数据库,CSV等中。
这绝不是利用网站或应用程序,而是将旧网站的用户数据输入新网站。我正在寻找一种方法来自动化这个条目 - 填充电子邮件,填充名字,填写姓氏,提交表单,延迟一秒钟的响应(这是在本地运行所以它应该是snappy),选择一个新行到插入,重复。
编辑 - 我完全意识到JS不适合这项工作,但我相信它可以工作。我试图在这里使用JS的唯一原因是因为这是能够完成这项工作的一种语言,我很满意,并且在应用程序中不需要大量的工作。我只能使用其他技术,如果它真的拼写出来......通常我会选择学习路线,但这次我根本就不能。 很抱歉这么挑剔!
答案 0 :(得分:1)
我认为制作一个脚本填写表单并提交它很复杂。最简单的方法是按下“提交”按钮(可能是通过POST请求)浏览器提交数据。
你说过你只想用JavaScript做这件事。您可以使用jQuery ajax功能(http://api.jquery.com/jQuery.ajax/)来准备和发送查询。
要准备查询,必须使用与表单相同的参数名称(元素的name属性)。
问题是如何使用JavaScript中的CSV文件。由于JavaScript无法访问您的文件系统,您必须使用奇特的解决方案,例如在textarea中粘贴CSV文本。使用此方法,您的javascript可以访问CSV数据,解析它并准备请求。然后,您可以使用ajax函数发送查询。
另一方面,您可以使用urllib模块轻松地执行一个小型Python脚本。我认为它比使用JavaScript更快更容易。
在这两种情况下,服务器的行为都与使用“提交”按钮发送请求的行为相同。
所以脚本的步骤(任何语言):
答案 1 :(得分:1)
好的,我自己完成了这个...我很欣赏你的所有输入,但我真的需要用JS完成这个,正如我解释的那样。我总是非常喜欢冒险,但是当我绝对不能花费超过必要的时间时(我很少见)。解决方案并不复杂:
首先,我使用phpMyAdmin中的LOAD DATA将数据导入MySQL表。不重要的。接下来,我为JS发送了一些PHP来发送AJAX请求。
getUser( $_POST['uid'] );
function getUser( $uid ){
$usr = "********";
$pwd = "********";
$db = "import_users";
$host = "localhost";
$cid = mysql_connect($host,$usr,$pwd);
if (!$cid) { echo("ERROR: " . mysql_error() . "\n"); }
$SQL = "SELECT * FROM users WHERE id = $uid";
$retid = mysql_db_query($db, $SQL, $cid);
if(!$retid){
echo( "error: " . mysql_error());
} else{
while ($row = mysql_fetch_array($retid)) {
$user = array(
'email' => $row["email"],
'firstname' => $row["firstname"],
'lastname' => $row["lastname"],
'username' => $row["username"],
);
echo json_encode($user);
}
}
}
这个PHP不需要干净,不需要清理,不需要优化等等 - 这发生在一个时间和本地。
接下来,JavaScript:
function incrementUser(){
$.ajax({
type: "POST",
url: "/path-to-php-file/ajax.php",
data: "uid="+i,
success: function(msg){
console.log( "Completed: " + JSON.parse(msg) );
var user = JSON.parse(msg);
jQuery('#email').val(user.email);
//jQuery('#user_login').val(user.username);
jQuery('#first_name').val(user.firstname);
jQuery('#last_name').val(user.lastname);
jQuery('#user_info_form').submit();
}
});
if( i > 1463 ){
clearTimeout( time );
} else{
i = i + 1;
}
}
再次 - 可以更好地执行,但无关紧要,因为这是一次性过程。这非常有效,增量时间可能更短,需要更少的时间来完成整个过程。
再次感谢您的投入,对于那些掌握这些其他技术或者有时间玩它们的人来说,可能会有很多帮助。不会不受重视!
答案 2 :(得分:0)
很抱歉,如果我没有帮助,但如果您必须通过表示层来处理您的模型,那么您的应用程序设计就会遇到很大问题。
除了投诉之外,我宁愿选择PHP或Python中的简单脚本,而不是任何JS。使用curl
功能,您可以使用从CSV解析的数据向服务器发送POST请求。
答案 3 :(得分:0)
复制浏览器发出的请求。使用像fiddler或paros代理这样的http嗅探器。一旦你看到浏览器发送了什么数据,就应该很容易复制这种行为。
另一种解决方案是使用watir编写浏览器脚本。 Watir用于单元测试Web应用程序,但也可以很容易地处理这个问题。