Имитация «клика» с помощью Python - PullRequest
0 голосов
/ 12 февраля 2019

Я прочитал во всех темах, но не очень понятно, как имитировать щелчок в Python.Я использую requests, но я не понимаю, как его смоделировать.

Код, который мне нужно «нажать», таков:

<div class="container"> <a class="brand" href=url> <img src="logo2.png" alt="Logo"></a>
        <div class="page-container">
            <form class='addf' action="" method="post">
                <h1>url server</h1>


                <p>

                Welcome to url server!
                </p>
                                <input type="text" name="Username"  id="Username" readonly placeholder="Click to generate your username...">
                <input type="hidden" name="formid" value="32bbba790d2a75a5dafec2ec6c3bbc19" />

                <button name='urlline' type="submit">Generate now!</button>
            </form>
        </div>

Спасибо всем заранее

Ответы [ 3 ]

0 голосов
/ 12 февраля 2019

Если вы знаете, какое действие отправляет форма, вы можете сделать это, отправив сообщение в сочетании с Beautiful Soup .

Строка: <input type="hidden" name="formid" value="32bbba790d2a75a5dafec2ec6c3bbc19" /> важна, так какэтот хэш, скорее всего, был сгенерирован при обслуживании страницы.Это сделано для борьбы с DDoS, например, кто-то спамит запросы к форме действий.Таким образом, чтобы веб-сервер принял ваш запрос, вам нужно будет проверить это значение и передать его вместе с запросом POST.

Вы можете сделать что-то вроде этого:

import requests
from bs4 import BeautifulSoup


url = "http://some-url/"                              # replace with target URL
r  = requests.get(url)
if r.status_code == 200:
    bs = BeautifulSoup(r.text)
    form = bs.findAll("form", {"class": "addf"})[0]   # find the form

    inputs = form.findAll("input")                    # find the input-fields
    hash = None
    for input in inputs:
        if input.get("name") == "formid":             # find the hash
            hash = input.get("value")

    if hash:
        action = "createusername"                     # replace with target action
        res = requests.post(url + action, data={
            # ... other parameters, if any
            "formid" : hash
        })
        print(res)

Выможет понадобиться уточнить, как Beautiful Soup выполняет поиск в HTML, например, если несколько элементов имеют class="addf".

0 голосов
/ 04 марта 2019

это работает для меня:

import requests as req
import random
import math
username = "";    
payload = {'Username': username,'password': 'password'}
resp = req.post(url, data=payload)

спасибо!:)

0 голосов
/ 12 февраля 2019

Вы можете использовать инструменты разработчика chrome для наблюдения за сетевым трафиком, а затем использовать библиотеку запросов для имитации запроса http.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...