如何使用POST方法自动化网站的交互

时间:2014-04-14 13:58:13

标签: python selenium mechanize

我需要在本网站的文本框中输入文字:

http://www.link.cs.cmu.edu/link/submit-sentence-4.html

然后我需要返回返回页面的html。我看过其他解决方案。但我知道所有人都没有解决方案。我见过selenium,但我不明白它的文档以及我如何应用它。请帮我谢谢。

顺便说一句,我有一些关于beautifulsoup的经验,如果它有帮助。我曾经问过,但请求是唯一的解决方案。我不知道如何使用它虽然

3 个答案:

答案 0 :(得分:1)

首先,如果您正在查看单个页面,通过BeautifulSoup进行imho自动化是一种过度的做法。您最好查看页面源并从中获取表单结构。你的表格非常简单:

<FORM METHOD="POST"
ACTION="/cgi-bin/link/construct-page-4.cgi#submit">
<input type="text" name="Sentence" size="120" maxlength="120"></input><br>
<INPUT TYPE="checkbox" NAME="Constituents" CHECKED>Show constituent tree &nbsp;
<INPUT TYPE="checkbox" NAME="NullLinks" CHECKED>Allow null links &nbsp;
<INPUT TYPE="checkbox" NAME="AllLinkages" OFF>Show all linkages &nbsp;
<INPUT TYPE="HIDDEN" NAME="LinkDisplay" VALUE="on">
<INPUT TYPE="HIDDEN" NAME="ShortLength" VALUE="6">
<INPUT TYPE="HIDDEN" NAME="PageFile" VALUE="/docs/submit-sentence-4.html">
<INPUT TYPE="HIDDEN" NAME="InputFile" VALUE="/scripts/input-to-parser">
<INPUT TYPE="HIDDEN" NAME="Maintainer" VALUE="sleator@cs.cmu.edu">
<br>
<INPUT TYPE="submit" VALUE="Submit one sentence">
<br>
</FORM>

所以你应该能够提取字段并填充它们。

我会使用curl-X POST(例如here - 同时查看答案:))。

如果你真的想在python中这样做,那么你需要做一些像POST using requests这样的事情。

答案 1 :(得分:0)

直接从文档中删除并更改为您的示例。

from selenium import webdriver

# Create a new instance of the Firefox driver
driver = webdriver.Firefox()

# go to the page
driver.get("http://www.link.cs.cmu.edu/link/submit-sentence-4.html")

# the page is ajaxy so the title is originally this:
print driver.title

# find the element that's name attribute is Sentence
inputElement = driver.find_element_by_name("Sentence")

# type in the search
inputElement.send_keys("You're welcome, now accept the answer!")

# submit the form 
inputElement.submit()

这至少可以帮助您输入文本。然后,看一下this example来检索html。

答案 2 :(得分:0)

遵循OP要求在python中使用该进程。

我不会使用selenium,因为它会在你的桌面上启动一个浏览器并且只是填写一个表单并得到它的回复是有点过分的(如果你的页面有JS或ajax的话,你可以证明它是合理的。)

表单请求代码可以是:

import requests

payload = {
    'Sentence': 'Once upon a time, there was a little red hat and a wolf.',
    'Constituents': 'on',
    'NullLinks': 'on',
    'AllLinkages': 'on',
    'LinkDisplay': 'on',
    'ShortLegth': '6',
    'PageFile': '/docs/submit-sentence-4.html',
    'InputFile': "/scripts/input-to-parser",
    'Maintainer': "sleator@cs.cmu.edu"
}

r = requests.post("http://www.link.cs.cmu.edu/cgi-bin/link/construct-page-4.cgi#submit", 
                  data=payload)

print r.text

r.text是您可以通过以下方式解析的HTML正文BeautifulSoup。

查看HTML回复,我认为您的问题在于处理<pre>标记内的文本,但这超出了此问题的范围。

HTH,