【问题标题】:Click on each onclick where the onclick attribute changes randomly点击onclick属性随机变化的每个onclick
【发布时间】:2018-03-18 01:00:32
【问题描述】:

我需要废弃一个网页并点击网页上的多个标签。 我正在检查 onclick 的属性值随机变化,我找不到选择每个选项卡的方法。 onclick 属性是: onclick="clickDashboard('889113733777776')" onclick="clickDashboard('894967889413237')"

这是我想尝试单击每个选项卡的 html 片段。我通过 getHTML() casprjs 函数得到它,如果我尝试从源代码(crtl+U)复制,我只能看到 javascript 代码。您还可以看到 li 标签类是如何'activetab' 来指示显示哪个选项卡。 Here 链接到完整的 html 源文件

<!--TEMPLATES-->
    <ul id="tabul">
        <li id="litab" class="ntabs add"><a href="" id="addtab" class="osx">+</a></li>
        <li id="litab" class="add rightAlign setting-item">
            <img src="/Content/images/icons/expand-24x24.png" class="out-triggerer gray" onclick="fullScreen()">            
        </li>        
        <li id="default-report-export" class="rightAlign">
            <a href="/report/defaultExport" download="">
                <input type="image" src="/Content/images/icons/excel.gif" value="Excel" title="Export default report">
            </a>
        </li>
        <li id="default-report-export" class="rightAlign">
            <a href="/report/defaultExport?isPdf=true" download="">
                <input type="image" src="/Content/images/export-pdf-24x24.png" value="Excel" title="Export default report">
            </a>
        </li>
        <li id="dbTab_889113733777776" class="ntabs addedTab activeTab">
            <span id="dbTabLabel_889113733777776" class="dashTitle" onclick="clickDashboard('889113733777776')">Dashboard EUR</span>
            <span id="dbTabSettings_889113733777776" class="settingsContainer dashSettings" style="">
                <div id="topnav" class="topnav">
                    <a href="javascript:void(0)" class="signin" onclick="toggleTabSettingsMenu('889113733777776',true);">
                        <span><img src="/Content/Images/icon_gear.png" alt="Edit"></span>
                    </a>
                </div>
                <fieldset id="dbTabSettingsMenu_889113733777776" class="dashSettings-menu">
                    <ul class="dashboardEditMenu">
                        <img src="/Content/images/close.png" onclick="toggleTabSettingsMenu('889113733777776',false);" alt="tooltip" style="position:absolute;right:2px;top:2px;border:0;">
                        <li class="dashboardEditMenuList">
                            <a href="javascript:void(0)" class="addWidget" onclick="toggleLeftUpdatePanelMenu(true);"> Añadir widgets</a>
                        </li>
                        <li class="dashboardEditMenuList">
                             <a href="javascript:void(0)" class="closeDash" onclick="deleteDashboard('889113733777776')"> Borrar este dashboard</a>
                        </li>
                    </ul>
                </fieldset>
            </span>
        </li>
        <li id="dbTab_894967889413237" class="ntabs addedTab">
            <span id="dbTabLabel_894967889413237" class="dashTitle" onclick="clickDashboard('894967889413237')">Dashboard USD</span>
            <span id="dbTabSettings_894967889413237" class="settingsContainer dashSettings" style="display:none;">
                <div id="topnav" class="topnav">
                    <a href="javascript:void(0)" class="signin" onclick="toggleTabSettingsMenu('894967889413237',true);">
                        <span><img src="/Content/Images/icon_gear.png" alt="Edit"></span>
                    </a>
                </div>
                <fieldset id="dbTabSettingsMenu_894967889413237" class="dashSettings-menu"> 
                    <ul class="dashboardEditMenu">
                        <img src="/Content/images/close.png" onclick="toggleTabSettingsMenu('894967889413237',false);" alt="tooltip" style="position:absolute;right:2px;top:2px;border:0;">
                        ...
                   </ul>
            </fieldset>
        </span>
    </li>
</ul>

我正在尝试选择每个选项卡并使用此代码制作屏幕截图:

//Wait to be redirected to the Home page, and then make a screenshot
casper.then(function(){
    casper.wait(5000, function(){
        this.capture('home.png');
        var tabs = document.querySelectorAll('[id^=dbTabLabel]');
        var i;
        console.log('Tabs found: ' + tabs.length);
        for(i = 0; i < tabs.length; i++) {
            tabs.click()
            var name = 'tab' + i + '.png'
            this.capture(name); //Make a screenshot for each tab
        }
    })    
});

但它似乎没有选择任何选项卡,因为输出是Tabs found: 0

【问题讨论】:

    标签: javascript onclick casperjs


    【解决方案1】:

    我推荐使用

    casper.each(tabs, function(self, tab){
    
    };
    

    改为for。此外,在querySelectorAll 中使用更通用的选择器,例如ul#tabul li。我尝试在 casperjs 脚本中使用 for 循环,但总是出错,每次使用每个和更多通用选择器都对我有用!

    【讨论】:

    • 谢谢,但我仍然无法选择那些 li 块。正如您所说,我使用更通用的选择器进行了测试,并且选项卡始终为空。我编辑了原始问题以添加登录后获得的完整 html 文件并使用 getHTML() casperjs 函数保存。我不知道我的问题是否仅在由于某些嵌入式脚本而“即时”抓取时才发生。我迷路了。
    猜你喜欢
    • 1970-01-01
    • 2021-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-12
    • 1970-01-01
    • 2011-10-16
    • 1970-01-01
    相关资源
    最近更新 更多