我想编写一个脚本,该脚本接受一个文本参数,打开与特定网站的连接,并使用字段的ID将arg输入到文本字段中。这可能吗?我该怎么做?我是一个全贝壳菜鸟
编辑:
确切流程:
- start script with string
- input string into text field on web page
- click form button
- wait for processing
- click hyperlink
答案 0 :(得分:4)
如果您确切知道需要填写哪个字段,则可以使用lynx
完成此操作。假设您使用脚本作为输入参数获取字符串S
。然后,您将创建一个命令脚本,该脚本将指导lynx
完成其行为。
例如,假设S=foo
,您的字段是网页中的第二个字段。之后,还有两个字段,然后是提交按钮。之后,您等待页面加载并单击超链接(之后退出)。该网页是www.something.com。
命令脚本将位于文件bar.txt:
中key <tab> //get to first field
key <tab> //get to second field
key f //input f
key o //input o
key o //input o
key <tab> //get to third field
key <tab> //get to fourth field
key <tab> //get to sumbit button
key ^J //click submit and wait for load
key <tab> //get to hyperlink
key ^J //click hyperlink and wait for load
key Q //exit
key y //confirm exit
主命令将是lynx www.something.com -accept_all_cookies -cmd_script=bar.txt
现在你需要做的就是动态创建输入字符串。
#!/bin/bash
script=bar.txt
input=$1
webpage=www.something.com
len=${#input}
echo 'key <tab>' > $script
echo 'key <tab>' >> $script
for i in `echo $input|fold -w1`
do
echo 'key '$i >> $script
done
echo 'key <tab>' >> $script
echo 'key <tab>' >> $script
echo 'key <tab>' >> $script
echo 'key ^J' >> $script
echo 'key <tab>' >> $script
echo 'key ^J' >> $script
echo 'key Q' >> $script
echo 'key y' >> $script
lnyx $webpage -accept_all_cookies -cmd_script=bar.txt
现在您需要做的就是保存脚本,将其修改为可执行文件并将其命名为./script your_string
答案 1 :(得分:3)
为了帮助您入门,我的脚本可以在今天的当地食堂订购午餐:
URL="https://lunch.com/lunch/cgi-bin/order.cgi"
O="order=Order"
A="amount_%d=%%d&amount_foil_container_%d=%%d"
function order_lunch() {
if [[ -n "$@" ]]; then
curl -u "$USER":"$PASSWORD" \
-d $(printf $(printf "$O&$A&$A&$A&$A" 0 0 1 1 2 2 3 3) \
"${@:2:8}") \
"$URL";
else
echo "Nothing to order.";
fi;
}
其中input是以下格式的字符串
2012-08-23 1 0 0 0 0 0 0 0
其中每个字段表示不同的菜肴,即日期为“1面食”后第一个位置的1
祝你好运。答案 2 :(得分:1)
...“打开与特定网站的连接,并使用字段ID”将
你的意思是你要填补&amp;发送HTML <form> ... </form>
,对吧?
我会使用curl(http://curl.haxx.se/)。使用curl,您可以非常轻松地自动执行HTTP POST请求,假设您的网站具有以下格式(摘自:http://curl.haxx.se/docs/httpscripting.html):
<form method="POST" action="junk.cgi">
<input type=text name="birthyear">
<input type=submit name=press value=" OK ">
</form>
这个命令将填补&amp;发送表单(让我们假装表格在http://www.example.com/when.cgi上可用):
curl --data "birthyear=1905&press=%20OK%20" http://www.example.com/when.cgi
答案 3 :(得分:0)
在尝试此操作之前,您需要先了解表单。
意味着您可以在本地重现thml文件,其中包含表单的所有值,表单操作可以是结束URL步骤3和4,也可以查看自动提交java脚本
表单提交后的最终超链接 - 如果最后一步是通过解析帖子的结果然后使用curl或wget或者作为点击的东西
E2A bash脚本的问题是我上面创建表单的概念是公牛废话,因为然后执行java脚本命令行浏览器或链接/ lynx / wget / curl等将是一个挑战。
第一个问题是表单是否支持get和post - 如果表单操作只能发布,那么您将无法将表单字段作为变量发送,即
http://destinatio-form-url.com/acceptform.cgi?user=something&address=something_else
上面的例子是你如何得到你的表格价值如果得到支持,如果你需要发布然后表格需要通过表格动作设置为发布到达该网址,它就像我说你需要创建表单。
如果假设你可以通过上面的格式发送它,那么要注意的是可点击链接中的响应是否是另一次点击 - 你可以看到问题,如果它返回到提交给那时的同一页面 - 通过点击特定的东西和grepping / awking来解析html非常容易,直到你得到你发射的确切网址,
看看我的回答
bash script to login to webpage
这就是你在java身份验证中如何抓取一个cookie,然后以登录用户身份进行,你需要发布你的表单
我所说的只是在bash中是可能的,但是对于url处理可能用更好的语言来完成,这使得所有库都可以执行此操作并使其更优雅而不是调用各种系统命令
给出的示例是Java,但可以是任何语言,perl,php,python等等,并且它们都应该有用于此任务的库,因为Perl在google中查找LWP html以及许多特定库,如LWP HTML解析器等你可以使用
无论如何都是最好的
我认为如果有帮助,链接支持java脚本..
它就像lynx但有更多的插件
apt-cache search links|grep browser
amule-gnome-support - ed2k links handling support for GNOME web browsers
elinks - advanced text-mode WWW browser
elinks-data - advanced text-mode WWW browser - data files
elinks-doc - advanced text-mode WWW browser - documentation
elinks-lite - advanced text-mode WWW browser - lightweight version
libhtmlunit-core-js-java - GUI-Less browser for Java programs - JavaScript engine
libhtmlunit-java - GUI-Less browser for Java programs
libjenkins-htmlunit-java - Jenkins branch of HtmlUnit browser testing for web apps
libphp-snoopy - Snoopy is a PHP class that simulates a web browser
links - Web browser running in text mode
links2 - Web browser running in both graphics and text mode
man2html - browse man pages in your web browser
surf - simple web browser