Javascript/jQuery/html:当涉及“硬”刷新时,如何从页面源代码自动检索数据

Javascript/jQuery/html: How to automatize data retrieval from page source, when 'hard' refresh is involved?

本文关键字:数据 自动检索 源代码 html jQuery Javascript 刷新      更新时间:2023-09-26

重要提示:我已经完全改写/编辑了我原来的问题,所以请不要认为第一个答案无关紧要。

情况如下:有出版物数据库的网页,用户在其中选择不同的过滤器以搜索符合特定条件的某些文章。在某些情况下,例如在选择"一组人员"或"特定人员"时,将从下拉列表中实现筛选。当用户选择一个组(从"组"筛选器中)时,相应的人员姓名列表将显示在"人员"选择下拉列表筛选器中。此外,当"组"下拉列表中的值发生更改时,将使用"人员"过滤器的新下拉列表重新加载页面。我的目标是检索并保存"组"过滤器中每个值的"人员"过滤器的内容。我想通过在控制台窗口中使用 Javascript 代码来做到这一点。但是,我不想手动更改"组"过滤器的值,然后检索"人员"内容,而是换句话说,在控制台窗口中构建一个自动化过程(这是我知道的唯一方法)来获取我需要的数据。

这是我的问题:考虑到我的方法并不完全疯狂,这就是我尝试在 Safari 控制台上做的事情(如果有其他方法,请告诉我):

// Since the jQuery is not loaded in the resources I call it by this:
    var script = document.createElement('script');
    script.src = "https://ajax.googleapis.com/ajax/libs/jquery/1.6.3/jquery.min.js";
    document.getElementsByTagName('head')[0].appendChild(script);
// I locate the 'Group' Select List and I store the values of its options by this:
    $(document).ready(function(){
       //Cycle through all the groups
        var abtOptValues = new Array();
        $("[name='abt']>option.[value!='-1']").each(function(l){
            abtOptValues[l] = $(this).attr("value");
        });
// Now, with the values from the 'Group' Select List in an array I want to cycle through
// each one of them and get the respected values of the 'People' Select List. So I try this:
    for (var abtOptValue in abtOptValues)
    {
        $("[name='abt']").val(abtOptValues[abtOptValue]); //set the option in
                                                              // the 'Group' List
            var persOptValue = new Array();
            $("[name='pers']>option.[value!='-1']").each(function(i){ 
                    persOptValue[i] = $(this).attr("value");
            });
        console.log(persOptValue);
    }
});

但是,正如 Mike 在下面准确评论的那样,这不是一个正确的方法,当控制台中的 javascript 运行时,控制选择列表内容的 javascript 将不会运行。只有在控制台的脚本完成之后,控件的脚本才会选择为"组"列表选择的当前值,并将"人员"列表的相应选项内容打印为"组"列表中的选项数的多次。

如果希望上述内容有意义,我的问题是为了实现这种自动化,作为浏览器中页面的查看者,无需访问页面资源,应遵循什么策略?

如果我尝试以图表方式描述我需要采取的行动的顺序,那就是:

页面已加载 -> jQuery 库已加载 -> "组"选项 收集的列表 -> 设置"组"中的第一个选项 列表 -> 页面 重新加载 -> 加载 jQuery 库 -> 个选项的"人" 收集的列表(对应于第一个"组"选项)>设置 "组列表"中的第二个选项 -> jQuery 库已加载 ->
"人员"列表选项(对应于第二个"组"选项) 收集 -> 在"组"列表中设置第三个选项,依此类推...

提前谢谢你。

PS:请提到(虽然你已经推测过)我在html和jQuery这个领域几乎是新手。

编辑:在与一位朋友讨论这个话题后,他向我解释了一些事情,我将尝试在这里重新组合,据我所知,但如果您愿意,请说明您将这样做的方式。

因此,首先,一个重要的参数是我无法访问服务器和页面源代码,所以我要求的是"破解"已经到达我浏览器中的内容,以便检索我需要的数据。这是可能的,只要我不需要刷新页面。例如,当选择"选择列表"中的新值并且页面自动刷新以更新子项下拉列表的内容时,将进行刷新。其次,我需要自动化该过程并能够在控制台中键入代码,按一次回车键,然后让我上面描述的过程继续直到完成。

这位朋友建议这几乎是不可能的,除非外部应用程序在控制台中承担启动和停止javascript的管理角色,注意页面何时刷新并控制彼此之间的通信。他强调,通常的正常方式是访问服务器,在那里我可以要求在浏览器中仅返回我想要的数据。我期待你的回答。

如果希望警报仅显示一次,请将for循环从

for (HLValue in HLValues)
{
   alert(LLValues);
   // **Here is my problem**
}

var vals = []; // Create a new empty array
for (HLValue in HLValues)
{
    vals.push(HLValue); // Add the item value to your array
}
var joinedVals = vals.join("'n"); // Join the item values with a newline between them
alert(joinedVals); // Alert just once with the joined item values

要在每次页面刷新时包含 JQuery,请在<head>中添加以下行:

<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>

这将直接从他们的站点加载 JQuery,而无需下载它并在您的计算机上引用它。