我们可以使用纯Python urllib登录网站,修改一些表单值并提交吗?(无Selenium浏览器自动化)

我们可以使用纯Python urllib登录网站,修改一些表单值并提交吗?(无Selenium浏览器自动化),python,selenium,paypal,urllib,Python,Selenium,Paypal,Urllib,是否可以制作一个脚本,自动: 连接到PayPal HTTPS网站 使用用户名+密码登录 去一家 修改下拉列表中的一些值 点击按钮 所有这些都来自Python,使用标准方法,如urllib.request import urllib.request; s = urllib.request.urlopen('https://example.com').read().decode() 或者由于涉及到登录,我们是否必须通过使用Selenium方法/或其他方法(如PhantomJS)来“自动化”或“伪造

是否可以制作一个脚本,自动:

  • 连接到PayPal HTTPS网站
  • 使用用户名+密码登录
  • 去一家
  • 修改下拉列表中的一些值
  • 点击按钮
  • 所有这些都来自Python,使用标准方法,如
    urllib.request

    import urllib.request; s = urllib.request.urlopen('https://example.com').read().decode()
    
    或者由于涉及到登录,我们是否必须通过使用
    Selenium
    方法/或其他方法(如
    PhantomJS
    )来“自动化”或“伪造”真正的浏览器?(如果可能的话,我不想那样做)


    背景:我已经调查了很多地方,并通过电子邮件+电话请求他们的支持,但PayPal似乎不提供API来触发生成和下载2020年1月1日至2020年1月31日期间所有交易的CSV报告。。。除非您每月的销售额超过2万,并且在这种情况下,您可以访问他们的网站


    如果不是这种情况,则此报告API不可用,您必须手动登录,转到页面(参见上面的屏幕截图),在各种列表中单击,单击
    创建报告
    ,等待几分钟/小时,重新登录,返回此页面,最后单击
    下载
    。这是一项每月都要做的枯燥的任务(而且他们的网站一般都比较慢),我想让它自动化。

    指向SFTP报告的正确链接是:

    这些都是严格的每日报告文件,而不是每月或任何其他时间段。您必须在每个每日文件中读取和解析,以覆盖所需的时间段


    从理论上讲,可以用urllib或类似的东西模拟PayPal网站UI,并自动请求活动日志文件并下载它。但这是一个相当大的工作量,你每个月只会做一次,而且当贝宝改变他们的网站时,可能会中断。登录部分尤其难以自动化,因为除了密码之外,PayPal还需要额外的验证


    如果您打算自动化其中的某些部分,我建议您只在浏览器内部进行(Tampermonkey、Selenium等;请注意,默认情况下,Tampermonkey将paypal.tld列入黑名单,以防您自己导入恶意脚本)

    您知道您提到的javascript是否正在处理下拉列表吗“修改下拉列表中的一些值”。任何时候javascript动态更改DOM
    urllib。request
    将无法访问该文件。@Jortega如果可以使用URL修改下拉列表,我将查看HTMLparameter@Jortega它似乎确实是JS,提交按钮“创建报告”“似乎不是附加到简单GET或POST的经典
    。可能是JS和Ajax/XMLHttpRequest处理了这个问题(页面的源代码很难阅读,并且调用了多个.JS文件,所以我不容易找到),我担心您需要一些方法来与JS和Ajax交互。不幸的是,浏览器正在为您运行JS,这就是selenium工作的原因。谢谢您的回答。您有权访问SFTP报告吗?根据支持(我所在国家的本地),它似乎不适用于我(我会重试,谁知道呢?也许他们这次会启用它?)。为您启用它容易吗?日常文件对我来说很好,我会用一个小Python脚本毫不费力地解析每个文件?它是urllib的扩展,专门用于表单吗?你会如何用它来模拟Paypal用户界面(我可以花几个小时在这上面,我会学习一种新技术,而且不管怎样,Paypal很少改变他们的页面用户界面,他们的一些页面仍然有2004年的外观;)。感谢关于Tampermonkey的信息(直接在浏览器中使用扩展脚本)。我曾与拥有SFTP报告的商户合作,这是一项面向交易量大的商户的功能。在贝宝考虑启用20K阈值之前,这听起来是合理的,但我没有接到有关政策的通知。是的,mechanize提供了一个自动化表单的框架,可能还有其他功能(我上次使用该模块时称为“ClientForm”)。