如果以编程方式处理,选择标签不会更新/填充
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 上的哪个子视图将拉伸(以编程方式)