3

我有一个 python 脚本,它使用 requests 库将数据发送到 django 应用程序。然后用户切换到网页并单击一个获取编辑表单的按钮以添加一些附加信息

我希望在请求收到状态代码 200 后立即切换到网页并自动单击按钮,而不是用户每次都手动执行。

我研究过使用 Selenium,但这似乎有点过头了。有什么想法我该怎么做?

编辑

当前的过程看起来有点像这样:

  • 用户在客户端运行脚本
  • 脚本运行并收集静态数据
  • 脚本使用请求将数据作为帖子发送
  • 数据被保存到一个名为“Report”的模型中,一个名为“public”的布尔字段标记为 False
  • 用户切换到 Web 应用程序
  • 用户单击执行 ajax 调用的按钮并获取该报告的编辑表单(它通过比较登录用户的用户名知道您是发送它的人)
  • 用户添加附加数据并保存
  • “public”字段更改为 True,每个人都可以看到报告。

其中大部分工作正常,我只希望脚本自动切换到网页并单击按钮,而不是手动完成。我知道这有点令人费解,但我希望它能更好地解释事情

我也使用 Windows 和 Chrome 作为我的网络浏览器

第二次编辑

所以我做了一个小演示来玩。我创建了一个名为“test.html”的文件,如下所示:

<html>
    <head>
        <title>Test</title>
        <script type='javascript/text' src='jquery.js' ></script>
    </head>
<body>
    <div class="container">
        <button id="button1"> Fake </button>
        <button id="button2"> Fake </button>
        <button id="button3"> Real </button>
    </div>


<script>
$(function() {
    $('#button3').on('click', function() {
          alert('you found it!');
    });
});

</script>

</body>
</html>

如您所见,运行脚本的唯一方法是单击“真实”按钮。现在我编写了一个 python 脚本,将其显示在屏幕上:

import win32gui

class Window(object):
    def __init__(self, handle):
        assert handle != 0
        self.handle = handle

    @classmethod
    def from_title(cls, title):
        handle = win32gui.FindWindow(title, None) or win32gui.FindWindow(None, title)
        return cls(handle)


chrome = Window.from_title('Test - Google Chrome')

win32gui.SetForegroundWindow(chrome.handle)
win32gui.SetFocus(chrome.handle)

现在我如何让它复制用户完成的按钮单击?可能有一种方法可以使用坐标以图形方式进行,但这是唯一的方法吗?你如何保证按钮总是在同一个位置?有比使用按钮更好的方法吗?

4

1 回答 1

1

所以你想要做的就是在页面打开时自动点击一个按钮?我假设您只想在某些情况下自动单击,因此将 javascript/jquery 隐藏在条件后面。

def your_view(request):
    # your standard processing
    auto_click = request.GET.get('auto_click', False)
    if auto_click is not False:
        auto_click = True
    render('yourtemplate.html', {'auto_click': auto_click })

然后,在您的模板中:

{% if auto_click %}
<script>
$(document).ready(function() {
    $('yourbutton').click();
});
</script>
{% endif %}

当用户打开网页时,只需将“?auto_click=1”附加到 URL,您将获得正确的行为。

于 2013-09-26T22:39:19.317 回答