我希望,通过python脚本,能够登录一个网站并检索一些数据。这是我公司的委托书。在
我知道这个问题似乎是你可以在搜索中找到的其他问题的复制品,但事实并非如此
我已经试过在回答这些问题时使用建议的解决方案,但它们都不起作用。。。我不仅需要一段代码来登录和获得一个特定的网页,还需要一些“概念”背后的所有机制如何运作。在
以下是我想做的事情的描述:
登录网站>;进入第X页>;以某种形式插入第X页的数据,然后按“计算”按钮>;捕获我的查询结果
一旦我有了结果,我将看看如何对数据进行排序。在
我如何在代理之后实现这一点?每次我尝试使用“请求”库登录时,它都不起作用说我无法获取页面X,因为我没有进行身份验证。。。或者更糟糕的是,我甚至无法到达那一边,因为我以前没有设置代理。在
要求澄清
首先,确保您了解获取计算结果的上下文
(F12将在Chrome中显示DevTools或Firefox中显示Firebug,您可以从中了解下面讨论的大部分细节)
基于简单HTTP的场景
很有可能,您的情况将允许使用简单的HTTP通信。我将假设以下情况:
复杂:浏览器模拟场景
有些情况下,获得结果所需的交互部分依赖于JavaScript代码在页面上执行某些操作。通常,通过调查什么是最终的HTTP请求,可以将其转换为HTTP场景,但在这里,我将假设这是不可行或不可能的,我们将使用真实的浏览器进行仿真。在
对于这个场景,我假设:
解析基于HTTP的方案
Python提供了优秀的
requests
包,可以满足我们的需求:代理人
aa在
http://10.10.1.10:3128
使用代理,用户名为user
,密码为pass
基本身份验证
假设web应用允许用户
^{pr2}$appuser
和密码apppass
进行访问或者使用显式的基本身份验证
摘要式身份验证的区别只是类名为HTTPDigestAuth
Other authentication methods are documentedat请求页。在
HTML表单的HTTP POST
注意,这个
url
不是表单的url,而是当您按下submit
按钮时所采取的“操作”的url。在一起
用户通常分两步进入最终的HTML表单,首先登录,然后导航到表单。在
然而,web应用程序通常允许(在了解url表单的情况下)直接访问。这将在同一步骤执行身份验证,如下所述。在
注意:如果这不起作用,您将不得不使用
requests
的会话,这是可能的,但我将不在这里详细说明。在现在,您将通过
req
获得您的结果,您就完成了。在解决浏览器模拟场景
代理人
Selenimum doc for configuring proxy建议在web浏览器中配置代理。同一个链接提供了有关如何从脚本中设置代理的详细信息,但是这里我假设,您使用了Firefox,并且已经(在手动测试期间)成功地配置了代理。在
基本或摘要身份验证
以下修改的snippet由Mimi源于SO answer,使用基本身份验证:
注意,Selenium似乎没有为基本/摘要式身份验证提供完整的解决方案,上面的示例很可能可以工作,但是如果不行,您可以检查这个Selenium Developer Activity Google Group thread并看到,您并不孤单。有些解决方案可能对你有用。在
摘要式身份验证的情况似乎比基本身份验证更糟糕,有些人报告AutoIT成功或盲目发送密钥,上面提到的讨论显示了一些尝试。在
通过登录表单验证
如果web站点允许通过以某种形式输入凭据来登录,那么您可能是幸运的,因为使用Selenium这是一项相当简单的任务。欲了解更多信息,请参阅下一章填写表格。在
填写表格并提交
与身份验证不同,在表单中填充数据、单击按钮和类似的活动是Selenium工作得很好的地方。在
结论
所提供的信息以相当笼统的方式描述了要做什么,但缺乏具体细节,这将允许提供量身定制的解决方案。这就是为什么这个答案侧重于提出一般方法。在
有两种情况,一种是基于HTTP的bing,另一种是使用仿真浏览器。在
HTTP解决方案是更好的,尽管事实上,它需要在搜索时有更多的准备,要使用哪些HTTP请求。最大的优点是,它在生产中速度更快,需要更少的内存,并且应该更健壮。在
在极少数情况下,当浏览器中有一些必要的JavaScript活动时,我们可以使用浏览器仿真解决方案。但是,这要设置得复杂得多,并且在身份验证步骤中存在重大问题。在
相关问题 更多 >
编程相关推荐