Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.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
Javascript 有没有一种方法可以不使用selenium或浏览器客户端从在线应用程序提交表单?_Javascript_Python_Forms_Selenium_Web Scraping - Fatal编程技术网

Javascript 有没有一种方法可以不使用selenium或浏览器客户端从在线应用程序提交表单?

Javascript 有没有一种方法可以不使用selenium或浏览器客户端从在线应用程序提交表单?,javascript,python,forms,selenium,web-scraping,Javascript,Python,Forms,Selenium,Web Scraping,我想为自己建立一个在线应用程序,为自己管理库存,并将物品提交到本地分类网站。这个本地分类网站没有API,只有一些外观陈旧的HTML表单,它们有多个步骤 如果不使用selenium/webdriver,或通过firefox/chrome启动虚拟客户端,那么在网页上远程提交表单的方式何在?它必须支持某种会话,因为提交过程是多步骤的 我使用webdriver和python完成了这项工作,这似乎是在线上对类似问题最流行的答案 只要您知道post要查找的post变量,就可以在Python2.7、Pytho

我想为自己建立一个在线应用程序,为自己管理库存,并将物品提交到本地分类网站。这个本地分类网站没有API,只有一些外观陈旧的HTML表单,它们有多个步骤

如果不使用selenium/webdriver,或通过firefox/chrome启动虚拟客户端,那么在网页上远程提交表单的方式何在?它必须支持某种会话,因为提交过程是多步骤的


我使用webdriver和python完成了这项工作,这似乎是在线上对类似问题最流行的答案

只要您知道post要查找的post变量,就可以在Python2.7、Python3.5中使用,或者提交每个页面并获得结果,前提是它们确实只是提交post。

一般来说,您应该能够使用任何HTTP客户机/库来完成此任务(在幕后,一切都归结为对某些服务器进行正确的HTTP调用)

它的难度在很大程度上取决于您所使用的应用程序的设计(糟糕程度)

在simples场景中,您需要:

  • 登录,并跟踪会话cookies
  • 通过POST将数据发送到服务器
这里的示例使用Python
请求
,这几乎是当今最好的选择

让我们开始吧

首先,您需要检查您的登录页面表单。通常,查看页面HTML将为您提供有关如何构建请求的足够信息

例如:

<form action="/login" method="POST">
    <input type="text" name="username">
    <input type="password" name="password">
    ...
</form>
接下来,我们将通过POST提交凭据(假设您的应用程序位于
http://example.com
):

此时,您可以检查
response.ok
以确保一切正常。如果您检查
session.cookies
,您应该会看到您的会话cookie已设置

从现在起,使用该会话向应用程序发出的所有请求都将经过身份验证,因此与从浏览器运行的请求相同

要提交表单数据,只需开始检查应用程序的工作方式(通过检查表单获取提交URI和表单字段名,就像我们在登录页面中所做的那样,并使用相同的会话通过POST提交数据)


如果页面HTML很复杂,那么使用浏览器开发人员工具查看HTTP请求,并通过代码进行复制也可能会有所帮助。

您可以使用PHP中的
cURL
或Python中的类似库。谢谢,我对PHP非常熟悉,但这同样是一个学习项目。我考虑的是c继续使用Python,因为请求库看起来非常简单。我当前的目标是学习NodeJS。NodeJS是否有一个很好的库,任何人都可以推荐它类似于Python的请求?谢谢你,redShadow!这太棒了,正是我想要的。我只有一个或两个小问题。1.主控有多困难tain代码依赖于其他人的网站来工作?如果他们更改元素名称,或者在此过程中进行任何小的更改,我相信我每次都需要更新我的应用程序。2.您是否有一个库可以为NodeJS推荐,或者您会推荐我使用Python,或者Django?关于可维护性,这正是他们发明API的原因:)一般来说,你希望对系统应该如何集成有一个明确的“合同”,并保证不会突然改变和破坏你的应用程序。因此,最好的长期解决方案是说服第三方应用程序的作者创建一个适合您使用的API。不幸的是,这并不总是可能的,因此您需要小心,并确保在出现问题时得到通知。关于Python vs javascript/Nodejs,我个人的建议是Python(我有使用这两种语言构建东西的经验,并且在几乎所有方面都非常喜欢Python)。如果您刚刚开始web应用程序开发,一定要看看django,它提供了您可能需要的几乎所有东西。
import requests
session = requests.Session()
response = session.post(
    'http://example.com/login',
    data={'username': 'your_user', 'password': 'your_password'})