Как автоматически выбрать радио-кнопку фото? - PullRequest
1 голос
/ 12 марта 2012

Я пытаюсь сделать скрипт Greasemonkey для автоматического выбора переключателя.Опрос состоит из двух изображений, и когда вы нажимаете на одно изображение, эта опция выбирается, и поле CAPTCHA включается для голосования.

Я хотел бы знать, есть ли способ автоматического выбора нужного мне изображения.Я пробовал некоторые команды, такие как .click() и .checked, но безуспешно.

Вот (частичный) исходный HTML-код из опроса:

<fieldset>
<legend>Validação de voto</legend>
<div class="box-votacao">
    <ul class="duplo-lateral clearFix" id="participantes">

        <li class="off">
            <div class="foto">
                <a href="#">
                    <img class="foto-chamada" src="http://s.glbimg.com/et/bb/f/original/participantes/joao_carvalho_360x300.png" alt="João Carvalho">
                    <div class="selecionado"></div>
                    <p class="bloco-01 off">
                        <input name="opt" id="opt" value="1" type="radio">
                        <strong class="nome">João Carvalho</strong>
                    </p>
                </a>
            </div>
            <p class="legenda">Para votar em João Carvalho, disque 0303 108 8401 ou envie um SMS para 88401</p>
        </li>
        <li class="off ultimo">
            <div class="foto">
                <a href="#">
                    <img class="foto-chamada" src="http://s.glbimg.com/et/bb/f/original/participantes/yuri_360x300.png" alt="Yuri">
                    <div class="selecionado"></div>
                    <p class="bloco-01 off">
                        <input name="opt" id="opt" value="2" type="radio">
                        <strong class="nome">Yuri</strong>
                    </p>
                </a>
            </div>
            <p class="legenda">Para votar em Yuri, disque 0303 108 8402 ou envie um SMS para 88402</p>
        </li>

    </ul>
</div>
<div class="validacao clearFix noBorder">
    <div id="desabilitado"></div>
    <ul>
        <li>
            <img id="captcha" title="seguranca" />
        </li>
        <li class="digitar-codigo">
            <input name="answer" type="text" />
            <p id="erro" class="erro"><span>Erro!</span> <span class="erro-txt">Texto incorreto. Tente novamente.</span></p>
        </li>
        <li class="botao">
            <span><input name="votar" type="submit" class="submit" value="votar"/></span>
        </li>
    </ul>
</div>
</fieldset>

1 Ответ

0 голосов
/ 13 марта 2012

Как ваш сценарий определяет, какое изображение нажимать?

И - это изображение, на которое нажали? Если предположить, что это правда, то что-то вроде этого должно работать:

var targImage   = document.querySelector ("div.box-votacao img.foto-chamada[alt='João Carvalho']");
var clickEvent  = document.createEvent ('MouseEvents');
clickEvent.initEvent ('click', true, true);
targImage.dispatchEvent (clickEvent);


Если это не работает, опубликуйте ссылку на целевую страницу, если она общедоступна ... или ссылку на сохраненный снимок страницы, включая javascript, если она не общедоступна.



Обновление , теперь, когда задана целевая страница .

Эта страница немного хитрая; требуется чуть больше, чем просто щелчок. Кроме того, при проверке страницы значение имеет не изображение, а обработчики щелчков на содержании <li>.

Итак, с помощью комбинации щелчков и некоторых JS было протестировано следующее:

//--- Click the link and list-item associated with the desired image.
var targImg     = document.querySelector ("div.box-votacao img.foto-chamada[alt='João Carvalho']");
targLink        = targImg.parentNode;
targListItem    = targImg.parentNode.parentNode.parentNode;

clickNode (targListItem);

var ps          = unsafeWindow.ps;
for (var j in ps) {
    if (ps[j].className) {
        ps[j].className = ps[j].className.replace ("on", "off");
    }
}
targListItem.className  = targListItem.className.replace ("off", "on");
targListItem.getElementsByTagName ("input")[0].checked = "true";

var captchaBox  = document.querySelector ("#desabilitado");
if (captchaBox) {
    captchaBox.id = "habilitado";
}


function clickNode (targNode) {
    var clickEvent  = document.createEvent ('MouseEvents');
    clickEvent.initEvent ('click', true, true);
    targNode.dispatchEvent (clickEvent);
}


Наконец, эта страница, возможно, была разработана, чтобы помешать скриптингу, как Greasemonkey. Если это так, ваш сценарий может противоречить условиям предоставления услуг (я не слишком много читаю по-португальски, я не стал их искать), и они могут принять контрмеры, чтобы разрушить этот сценарий.

...