Shell:连接到网站并访问字段

Chr*_*ris 5 bash shell scripting

我想编写一个脚本,该脚本接受一个文本参数,打开到特定网站的连接,并使用该字段的ID将arg输入到文本字段中。这可能吗?我该怎么做?我是一个完全的壳菜鸟

编辑:

确切流量:

- start script with string
- input string into text field on web page
- click form button
- wait for processing
- click hyperlink
Run Code Online (Sandbox Code Playgroud)

Nej*_*ejc 5

如果您确切知道需要填写的字段,则可以使用来完成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
Run Code Online (Sandbox Code Playgroud)

然后,主要命令是 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
Run Code Online (Sandbox Code Playgroud)

现在您需要做的就是保存脚本,将其修改为可执行文件并调用它 ./script your_string


Fre*_*ihl 5

为了让您开始,这是我从当地食堂订购今天午餐的脚本:

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;
}
Run Code Online (Sandbox Code Playgroud)

其中输入是以下格式的字符串

2012-08-23 1 0 0 0 0 0 0 0
Run Code Online (Sandbox Code Playgroud)

其中每个字段表示不同的菜,即日期后第一个位置的 1 是“1 意大利面”

祝你好运。


Vin*_*yon 0

我认为在尝试此操作之前您需要先掌握表格。

这意味着您可以在本地重现 thml 文件,其中包括表单的所有值,表单操作可以是步骤 3 和 4 的结束 url,还可以查看自动提交 java 脚本

提交表单后,最终的超链接很好 - 如果最后一步是解析帖子的结果,然后使用curl或wget或充当点击的东西

E2A bash 脚本的问题是我上面创建表单的概念是废话,因为然后执行 java 脚本命令行浏览器或 links/lynx/wget/curl 等将是一个挑战。

第一个问题是表单是否支持 get 和 post - 如果表单操作只能 post 那么您将无法将表单字段作为变量发送,即

http://destination-form-url.com/acceptform.cgi?user=something&address=something_else

上面的示例是如果支持 get 则如何生成表单值,但是如果您需要发布,则需要生成一个表单,并将表单操作设置为发布以获取该 url,就像我说的那样,您需要创建形式。

如果假设您可以通过上述格式发送它,那么需要注意的是,如果再次点击,可点击链接中的响应在哪里 - 您可以看到问题,如果它返回到提交的同一页面上 - 它是通过 grepping 查找特定的内容并 grepping/awking 直到获得您触发的确切 url 来解析 html 非常容易,

看看我在这里的回答

bash脚本登录网页

这就是你在 java 中进行身份验证,获取 cookie,然后作为登录用户进行操作,这就是你发布表单所需的全部内容

我想说的是,在 bash 中这是可能的,但对于 url 处理,可能会用更好的语言来完成,它为您提供了所有库来执行此操作,并使其优雅,而不是调用各种系统命令

给出的示例是 Java 语言,但可以是任何语言,perl、php、python 等,它们都应该有用于此任务的库,对于 Perl,在 google 中查找 LWP html 以及许多特定的库,如 LWP HTML Parser 等接下来你可以使用

无论如何一切都好

我认为链接支持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
Run Code Online (Sandbox Code Playgroud)