如何自动选择照片单选按钮?

时间:2012-03-12 18:50:31

标签: javascript greasemonkey userscripts

我正在尝试使用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 :(得分:0)

您的脚本如何确定要点击的图片?

点击的图片?假设这是真的,那么这样的事情应该有效:

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 - 如果它不公开。



更新,现在已经提供了the target page

该页面有点棘手;只需要点击一下就可以了。另外,检查页面时,点击的图像不是包含<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这样的脚本。如果是这样,你的脚本可能违反了服务条款(不是阅读很多葡萄牙语,我没有去寻找它们),他们可能会采取对策来破坏这个剧本。