Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
填写文本输入,然后使用python按submit_Python_Html_Python 2.7_Beautifulsoup - Fatal编程技术网

填写文本输入,然后使用python按submit

填写文本输入,然后使用python按submit,python,html,python-2.7,beautifulsoup,Python,Html,Python 2.7,Beautifulsoup,我有这个html: <input type="text" class="txtSearch"> <input type="submit" value="Search" class="sbtSearch"> 我需要的是在文本字段中编写,然后使用python单击submit。输入标记不在表单中。我怎么能做到这一点呢?您不必实际填充字段并“单击”提交。您可以模拟提交并获得所需的结果 在Firefox中与firebug一起使用和urllib。使用firebug监视网络流量,

我有这个html:

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


我需要的是在文本字段中编写,然后使用python单击submit。输入标记不在表单中。我怎么能做到这一点呢?

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

在Firefox中与firebug一起使用和urllib。使用firebug监视网络流量,并从submit正在执行的HTTP post中获取post参数。创建一个dict并对其进行url编码。将其与url请求一起传递

例如:

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)

参数
vals
将根据您试图提交的内容而更改。在代码中进行适当调整。

如果您确实需要填充字段,这里有一个selenium解决方案。不过,您通常只需要将其用于测试目的

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()

更新了2019年的答案。此代码还处理
HTTP403禁止的
错误

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)

我试图在谷歌上找到,但没有找到任何简单的例子。。。我所能找到的只是我根本无法理解的长文档。。。我认为我需要使用Mechanize,但它需要表单。。。我应该向你展示什么?你可能会考虑更新你的帖子以包含Python 3.URLLIB已经过时了。使用lxml导入html中的
我想你指的是BeautifulSoup…bs4支持使用lxml html解析器,所以我不太确定你的评论是什么意思。事实上,如果您在同一环境中安装了lxml,那么它将成为默认的解析器,根据文档。错误消息:File“/home/path to the File/forUNReports.py”,第17行,在x=urlRequest.urlopen(targetUrl)。。。。。urllib.error.HTTPError:HTTP错误302:HTTP服务器返回了一个重定向错误,该错误将导致无限循环。最后一条30倍的错误消息是:已移动Temporarily@sangharsh这可能与您试图阅读的页面的cookies有关。看看这个