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

Posted

技术标签:

【中文标题】填写文本类型的输入并使用python按提交【英文标题】:Fill input of type text and press submit using python 【发布时间】:2012-10-21 09:50:22 【问题描述】:

我有这个 html

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

我需要在文本字段中写入,然后点击使用 python 提交。输入标签不在 Form 内。我怎么能这样做?

【问题讨论】:

我试图在谷歌上找到但没有找到任何简单的例子......我只能找到我根本无法理解的长文档......我认为我需要使用 Mechanize 但是它需要表格...我应该给你看什么? 【参考方案1】:

您不必实际填充字段并“单击”提交。可以模拟提交,得到想要的结果。

在 Firefox 中与 firebug 一起使用 BeautifulSoup 和 urllib。使用 firebug 观察网络流量,并从提交正在执行的 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 将根据您尝试提交的内容而改变。在您的代码中进行适当的调整。

【讨论】:

您可能会考虑更新您的帖子以包含 Python 3。 urllib 已过时。使用from lxml import html 我认为你的意思是 BeautifulSoup...bs4 支持使用 lxml html 解析器,所以我不太确定你的评论是什么意思。实际上,如果您在同一环境中安装了 lxml,根据文档,它会成为默认解析器。【参考方案2】:

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

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

【讨论】:

【参考方案3】:

更新 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)

【讨论】:

错误消息:文件“/home/path to the file/forUNReports.py”,第 17 行,在 x = urlRequest.urlopen(targetUrl) ..... urllib.error。 HTTPError:HTTP 错误 302:HTTP 服务器返回一个重定向错误,这将导致无限循环。最后 30 倍的错误消息是:已临时移动 @sangharsh 这可能与您尝试阅读的页面的 cookie 有关。看看这个teamfortress.tv/13900/python-urllib2-help#5

以上是关于填写文本类型的输入并使用python按提交的主要内容,如果未能解决你的问题,请参考以下文章

谷歌自动完成 - 输入选择

如何用python填充和提交html文本框

使用 jQuery 检测表单输入的自动完成

使用 URI Intent 打开 App 后,以编程方式填写输入并提交 AngularJS 表单

一个页面上有多个表单,并决定使用 PHP 提交哪个表单?

如何在点击Vaadin画布上的提交按钮时填写文本?