填写类型文本的输入并使用python按提交

时间:2012-10-31 19:48:39

标签: python html python-2.7 beautifulsoup

我有这个HTML:

<input type="text" class="txtSearch">
<input type="submit" value="Search" class="sbtSearch">

我需要的是在文本字段中写入,然后单击使用python提交。输入标记不在表单中。我怎么能这样做?

3 个答案:

答案 0 :(得分:13)

您不必实际填充字段并“点击”提交。您可以模拟提交并获得所需的结果。

在Firefox中使用BeautifulSoup和urllib以及firebug。使用firebug观察网络流量,并从HTTP POST获取提交为dong的post参数。创建一个dict并对其进行url-encode。将其与您的网址请求一起传递。

例如:

from BeautifulSoup import BeautifulSoup
import urllib

post_params = {
    param1 : val1,
    param2 : val2,
    param3 : val3
        }
post_args = urllib.urlencode(post_params)

url = 'http://www.website.com/'
fp = urllib.urlopen(url, post_args)
soup = BeautifulSoup(fp)

参数将根据您尝试提交的内容而更改。在您的代码中做出适当的调整。

答案 1 :(得分:7)

如果您确实需要填充字段,这是一个硒解决方案。但是,您通常只需要将其用于测试目的。

from selenium import webdriver

webpage = r"https://www.yourwebsite.com/" # edit me
searchterm = "Hurricane Sandy" # edit me

driver = webdriver.Chrome()
driver.get(webpage)

sbox = driver.find_element_by_class_name("txtSearch")
sbox.send_keys(searchterm)

submit = driver.find_element_by_class_name("sbtSearch")
submit.click()

答案 2 :(得分:0)

更新 2019年答案。这段代码还解决了HTTP 403 Forbidden错误。

import urllib.request as urlRequest
import urllib.parse as urlParse

url = "https://yoururl.com"
values = {"name": "value"}

# pretend to be a chrome 47 browser on a windows 10 machine
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36"}

# encode values for the url
params = urlParse.urlencode(values).encode("utf-8")

# create the url
targetUrl = urlRequest.Request(url=url, data=params, headers=headers)

# open the url
x  = urlRequest.urlopen(targetUrl)

# read the response
respone = x.read()
print(respone)