0

我正在尝试使用 Python 自动化 Internet Explorer 与网站的交互。我正在使用 IEC 库来执行此操作。

该网站设置为在从下拉菜单中选择用户名时触发操作。html代码片段如下:

<select name="ClientID" tabIndex="1001" title="Select a client" class="client-select focus-default need-focus-object valid" style="width: auto;" onchange="localChangeClient()">
  <option value="0">
  <option value="2629049">

我能够以编程方式在下拉列表中设置用户名,但这不会触发“onchange”事件。我已经阅读了一些其他参考资料(下面的链接),这些参考资料表明我应该寻找 AJAX 请求并直接触发它,但我不知道该怎么做。

  1. 使用 Python 在远程网站上触发 Javascript 事件
  2. 在更改下拉列表显示时调用 php 函数

我收集到“onchange”触发了对名为 localChangeClient() 的函数的调用。如何直接从 Python IEC 调用/触发该函数?

从我链接的示例中,似乎会在该 localChangeClient 函数中发出 AJAX 请求 - 对吗?鉴于我看不到实际的函数详细信息,我怎么知道要调用的 AJAX 请求是什么?

编辑:以下描述了持续的努力/发展。我想我只需要知道如何直接调用 AJAX URL

所以我正在阅读更多关于 AJAX 请求的信息。我发现我可以使用 Firebug(控制台窗口)告诉我为 onchange 事件调用的特定 AJAX url。当我更改下拉菜单时,Firebug 告诉我以下内容(为清楚起见而截断):

POST https://example.com/MyBasket/MyBasket.asp?update=Update%20Basket&ClientID=2629049,0&SDT=417.577989&SCheck=49913&Checkout=&ClientID=2629049&ClientID=0&CurrentPageUrl=&FullPage=false&MyBasketPage=1&OnClickScheduleCheckboxName=&OverlayRequest=true&TransactionStarted=0&ajax=true&cbxRegQuantity=1&cbxRegQuantity=1&update=no

所以我认为我在正确的轨道上。但现在我不知道如何从 Python 触发该 url。如果我只是“ie.Navigate(url)”,它似乎不起作用。它把我带到一个非格式化的窗口,下拉菜单仍然没有被选中。

我查看了 Microsoft 支持站点 ( http://support.microsoft.com/kb/167658 ),其中谈到将请求数据编码为字节等,但我不清楚这是否适用于此。

如果有人可以提供有关如何“直接执行 AJAX 请求”的一些详细信息,我将不胜感激

4

1 回答 1

1

使用 Python 的requests库调用您找到的那个 URL。您还需要在 Firebug 控制台中找到该 POST 请求的正文和任何自定义 HTTP 标头,以便在您的脚本中复制它。

res = requests.post(<url>, data=<request-body>, headers=<headers>)
于 2013-10-21T13:44:26.030 回答