ZebroidФорумПубличный разделВопросыПомогите написать щаблон автопостинга

Помогите написать щаблон автопостинга

14 августа 2014, 18:02
Зарегистрирован: 04 ноября 2013, 18:44
есть вот такая форма логина на сайте
<div id="all" class="ind_usr">
			<div id="body">
				                        <form method="post" action="" onsubmit="AjaxLogin(this); return false;" class="login">
    <h1>Вход</h1>
    <dl>
        <dt>
            <label for="login_login">Логин:</label>
        </dt>
        <dd>
            <input type="text" id="login_login" name="login" value="" class="radius3" />
        </dd>

        <dt>
            <label for="login_password">Пароль:</label>
        </dt>
        <dd>
            <input type="password" id="login_password" name="password" value="" class="radius3" />
            <span class="error radius3" style="visibility: hidden"></span>
        </dd>
        <dt>
            <div class="forgot">
                <a href="http://mypage.ru/forgot/">Забыли пароль?</a>
            </div>

        </dt>
        <dd class="login_submit">
            <div class="radius3">
                <p>
                    <input id="remember_" type="checkbox" name="remember" value="on" checked="checked" />
                    <label for="remember_">Запомнить меня</label>
                </p>
                <input type="submit" value="Войти" />
                <input type="hidden" value="" name="back" />
            </div>
        </dd>
    </dl>
</form>									<div class="clear"></div>
			</div>
		</div>

у нее ни имени ни айди, ничего не задано
как на нее сослаться?
я взял за основу щаблон fc2.com

procedure Login();
var
x, y: integer;
begin
Randomize();
x := Random(40);
y := Random(20);
Navigate('http://xxx.ru/login/', true);
ExecJS('document.login.innerHTML=document.login.innerHTML+''/>/>'';', false);
FillForm('login', '$LOGIN');
FillForm('password', '$PASSWORD');
Wait(1);
ExecJS('blog_login_form_check();', false);
ExecJS('document.login.submit();', true);
end;

как тут находить эту форму, главное интересует как сделать submit, заполнение уже получилось

также объясните пожалуйста что делает и зачем нужно
ExecJS('document.login.innerHTML=document.login.innerHTML+''/>/>'';', false);

и
Randomize();
x := Random(40);
y := Random(20);

Комментарий отредактирован 2 раз(а). Последний раз редактировал konfuciy 14 августа 2014, 18:27.
19 августа 2014, 19:00
Зарегистрирован: 10 апреля 2012, 00:00
Нужен доступ к сайту, без него я вам ничего особо посоветовать не могу.

19 августа 2014, 20:27
Зарегистрирован: 10 апреля 2012, 00:00
Получил в ЛС данные, отвечаю в теме, вдруг кому-то еще пригодится: значит ситуация такая, что сабмитить форму просто так действительно нельзя. Дело в том, что на обработчике onsubmit формы стоит вызов функции, которая сама берет данные и пытается залогинится через AJAX запрос, а сам процесс сабмита формы прерывает (по видимому сделано для того, чтобы писать об ошибки в данных логин/пароль без перезагрузки формы). Если сабмитить форму средствами JS, то она почему-то не вызывает событие onsubmit, а делает POST запрос, который, естественно не работает. В данной ситуации есть 2 варианта:

1. Вызывать самому ту функцию, которую вызывает onsubmit, а именно «AjaxLogin»
2. Фокусироватся на любом поле формы и отправлять нажатие кнопки Enter (как буд-то это сделал сам пользователь)

Привожу код для обеих случаев, так как в каждом из них есть свои минусы, но считаю, что второй случай всё же лучше.

1. Код
Navigate('http://mypage.ru/login/', true);
  FillForm('login', '$LOGIN');
  FillForm('password', '$PASSWORD');
  ExecJS('AjaxLogin(document.getElementById("login_login").form)', true);

Минусы: если форма будет изменена (поменяется принцип работы логина или имя функции в onsubmit) — перестанет работать.
Плюсы: более точно определяет окончание загрузки страницы

2. Код:
Navigate('http://mypage.ru/login/', true);
  FillForm('login', '$LOGIN');
  FillForm('password', '$PASSWORD');
  ExecJS('document.getElementById("login_login").focus()', true);
  KeyPress(2, 13);
  WaitForLoad();

Минусы: Может не точно определять, время окончания загрузки страницы после логина. Как средство защиты от этого можно добавить принудительную паузу на несколько секунд с помощью функции Wait
Плюсы: Так как мы работаем только с полями формы — то любые изменения в самой логике отправки данных не могут поломать работу скрипта

20 августа 2014, 11:10
Зарегистрирован: 04 ноября 2013, 18:44

admin в своем сообщении писал(а):Получил в ЛС данные, отвечаю в теме, вдруг кому-то еще пригодится: значит ситуация такая, что сабмитить форму просто так действительно нельзя. Дело в том, что на обработчике onsubmit формы стоит вызов функции, которая сама берет данные и пытается залогинится через AJAX запрос, а сам процесс сабмита формы прерывает (по видимому сделано для того, чтобы писать об ошибки в данных логин/пароль без перезагрузки формы). Если сабмитить форму средствами JS, то она почему-то не вызывает событие onsubmit, а делает POST запрос, который, естественно не работает. В данной ситуации есть 2 варианта:

1. Вызывать самому ту функцию, которую вызывает onsubmit, а именно «AjaxLogin»
2. Фокусироватся на любом поле формы и отправлять нажатие кнопки Enter (как буд-то это сделал сам пользователь)

Привожу код для обеих случаев, так как в каждом из них есть свои минусы, но считаю, что второй случай всё же лучше.

1. Код

Navigate('http://mypage.ru/login/', true);
  FillForm('login', '$LOGIN');
  FillForm('password', '$PASSWORD');
  ExecJS('AjaxLogin(document.getElementById("login_login").form)', true);

Минусы: если форма будет изменена (поменяется принцип работы логина или имя функции в onsubmit) — перестанет работать.
Плюсы: более точно определяет окончание загрузки страницы

2. Код:
Navigate('http://mypage.ru/login/', true);
  FillForm('login', '$LOGIN');
  FillForm('password', '$PASSWORD');
  ExecJS('document.getElementById("login_login").focus()', true);
  KeyPress(2, 13);
  WaitForLoad();

Минусы: Может не точно определять, время окончания загрузки страницы после логина. Как средство защиты от этого можно добавить принудительную паузу на несколько секунд с помощью функции Wait
Плюсы: Так как мы работаем только с полями формы — то любые изменения в самой логике отправки данных не могут поломать работу скрипта



огромное спасибо, а я делал заход через эмуляцию нажатия таба раз 8, чтобы войти в поле и потом энтер, это было очень наворочено))
в таком виде все красиво и быстро работает!

20 августа 2014, 13:16
Зарегистрирован: 04 ноября 2013, 18:44

admin в своем сообщении писал(а):Получил в ЛС данные, отвечаю в теме, вдруг кому-то еще пригодится: значит ситуация такая, что сабмитить форму просто так действительно нельзя. Дело в том, что на обработчике onsubmit формы стоит вызов функции, которая сама берет данные и пытается залогинится через AJAX запрос, а сам процесс сабмита формы прерывает (по видимому сделано для того, чтобы писать об ошибки в данных логин/пароль без перезагрузки формы). Если сабмитить форму средствами JS, то она почему-то не вызывает событие onsubmit, а делает POST запрос, который, естественно не работает. В данной ситуации есть 2 варианта:

1. Вызывать самому ту функцию, которую вызывает onsubmit, а именно «AjaxLogin»
2. Фокусироватся на любом поле формы и отправлять нажатие кнопки Enter (как буд-то это сделал сам пользователь)

Привожу код для обеих случаев, так как в каждом из них есть свои минусы, но считаю, что второй случай всё же лучше.

1. Код

Navigate('http://mypage.ru/login/', true);
  FillForm('login', '$LOGIN');
  FillForm('password', '$PASSWORD');
  ExecJS('AjaxLogin(document.getElementById("login_login").form)', true);

Минусы: если форма будет изменена (поменяется принцип работы логина или имя функции в onsubmit) — перестанет работать.
Плюсы: более точно определяет окончание загрузки страницы

2. Код:
Navigate('http://mypage.ru/login/', true);
  FillForm('login', '$LOGIN');
  FillForm('password', '$PASSWORD');
  ExecJS('document.getElementById("login_login").focus()', true);
  KeyPress(2, 13);
  WaitForLoad();

Минусы: Может не точно определять, время окончания загрузки страницы после логина. Как средство защиты от этого можно добавить принудительную паузу на несколько секунд с помощью функции Wait
Плюсы: Так как мы работаем только с полями формы — то любые изменения в самой логике отправки данных не могут поломать работу скрипта


спасибо большое за помощь. форму постинга — в том числе ява скрипт для постинга через редактор сделал уже сам благодаря вашим примерам и разъяснениям, хотя там были свои сложности заморочки, все работает теперь — и логин и постинг.