如果以编程方式处理,选择标签不会更新/填充

Posted

技术标签:

【中文标题】如果以编程方式处理,选择标签不会更新/填充【英文标题】:Select tag wont update/populate if handled programatically 【发布时间】:2021-12-24 02:05:29 【问题描述】:

我在一个网站上(您无权访问),该网站要求您选择带有特定标签的汽车。

如果我手动工作,一切正常。但是,以自动方式更新内容不会更新其他任何内容。这里是一系列select标签,手动更新1个,自动填充下一个标签。

尝试1(选择标签的更新值)

如果我在开发人员工具中这样做,而不是手动单击并选择其中一个标签

var elem = document.evaluate("/html/body/div[2]/div[2]/div/mat-dialog-container/mq-add-vehicle-dialog/div[2]/select", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;

elem.value = "07"; // (because 07 = value of model group 595)

然后模型组确实更新了,但模型没有填充选项,所以我无法继续。我只剩下你在下面看到的内容了。

所以这个方法确实适用于当前的选择标签,但由于某种原因没有用选项更新下一个标签

尝试 2(点击)

我想,如果用 .value 更新值不起作用,我可能可以单击选择标签以显示选项,然后手动单击 595 选项,我可能会填充模型。所以我尝试了...

var elem = document.evaluate("/html/body/div[2]/div[2]/div/mat-dialog-container/mq-add-vehicle-dialog/div[2]/select", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;

elem.click();

这根本没有任何作用。我希望它会带来如下图所示的选项下拉列表,这样我就可以单击其中一个选项。

我也试过直接点击选项标签而不打开选择列表。这也没有任何作用(可能是因为选择标签已关闭)。

我想知道他们将更新下一个标签的功能隐藏在哪里。有人知道我哪里出错了吗?或者我接下来应该尝试什么?我确实尝试遍历页面上的每个元素,单击每个元素以查找单击时打开选择标签的内容。似乎没有任何东西以编程方式与之交互。它只响应真实用户。

如何以编程方式操作这些标签?

更新

从上一个答案开始,表明问题是 angularjs 我已经下载了batarang 并试图检查我的元素的范围。然而这失败了。这个网站是 angularjs 吗?什么是赠品?脑子里有什么东西?

下面是一张图片,显示我正在检查一个测试样本网站的范围(显示batarang 正在运行)和正在运行的网站。

【问题讨论】:

【参考方案1】:

正如我从 html 源代码中看到的那样,该网站使用 angular。我猜网站会根据其角度范围变量的值进行自我更新。取决于这是 angularjs 还是 angular(更高版本),访问范围的方式会改变,但对于 angularjs 的情况you should be to acces the scope programatically。我敢打赌,这个页面是 angularjs(不是 angular)。当 angularjs 范围发生变化时,它应该相应地更新其内部状态。

【讨论】:

嗨,我听了你所说的(必须先学习一些东西)。我不确定这个网站是否有角度。因为当我选择一个元素时,$scope 没有做任何事情。 我查看了 html 并搜索了类(尤其是 ng-star-inserted),发现该网站实际上是 angular 5,因为这些类是由 angular 模块插入的答案(***.com/a/47796687/9485858)。在我做了一些搜索后发现 angular5 默认情况下不会暴露应用程序的内部状态。有一个 ng.probe 函数,但要使其工作,网站应该在启用调试模式的情况下构建。

以上是关于如果以编程方式处理,选择标签不会更新/填充的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式将边距和/或填充分配给标签

如何以编程方式填充核心数据存储,为每条记录生成索引

选择 stackView 上的哪个子视图将拉伸(以编程方式)

以编程方式填充 XAML ListView ItemsSource

以编程方式填充分配给对象的属性集定义中的数据

Jinja for 循环不会填充选择下拉列表