Python 如何单击编号更改的未打开选项卡

Python 如何单击编号更改的未打开选项卡,python,selenium,Python,Selenium,如何单击所有未打开的选项卡页面,当您单击选项卡时,这些页面的值会发生变化?(见下图) 基于此,采取以下方法: clickMe = wait(driver, 10).until( EC.element_to_be_clickable((By.XPATH, path + '[%s]' % str(index - 1)))) 对绝大多数页面都非常有效,但是我不知道如何在这种情况下使用它。你知道如何避开这个问题吗 它不起作用的原因是,只要单击未打开的选项卡,数值

如何单击所有未打开的选项卡页面,当您单击选项卡时,这些页面的值会发生变化?(见下图)

基于此,采取以下方法:

       clickMe = wait(driver, 10).until(
            EC.element_to_be_clickable((By.XPATH, path + '[%s]' % str(index - 1)))) 
对绝大多数页面都非常有效,但是我不知道如何在这种情况下使用它。你知道如何避开这个问题吗

它不起作用的原因是,只要单击未打开的选项卡,数值就会改变。这意味着作业正在尝试单击以前存在的元素,但当您打开关闭的选项卡时,数值已更改。下图更好地说明了这一点

假设您有
//div[@class=“KambiBC可折叠容器KambiBC mod event group container”][1]
在下图中,您可以看到上面的选择器将根据作业本身单击选项卡和加载网页的时间进行更改。该网页有一个随机打开和关闭标签页的习惯。这就解释了为什么它会单击一些元素然后完全断开,或者如果添加了try-except,则只单击一些元素并完成

输出:

1
2
3
4
#Stops working
渴望的

1
2
3
4
etc,, (Clicks all the pages)
以上图像均为:

//div[@class="KambiBC-collapsible-container KambiBC-mod-event-group-container"][1]` 
您可以在稍后看到这将如何导致问题。右侧的图像将无法定位//div[@class=“KambiBC可折叠容器KambiBC mod event group container”][11],其中左侧的图像可能会根据单击的选项卡的顺序找到


与使用索引引用这些“选项卡”不同,您需要另一种方法来唯一标识每个选项卡

一种解决方案是与站点开发人员合作,让他们为每个选项卡向“KambiBC可折叠容器”添加id或name属性

如果您使用页面对象模型方法,另一个解决方案是在页面上创建一个方法,该方法提供可用选项卡的列表,然后您可以通过标题文本引用这些选项卡。然后你只需记录你打开了哪些

另一个解决方案将取决于网站的功能。您可以利用这样一个事实,即如果打开了一个选项卡,那么容器看起来有一个类“KambiBC expanded”。如果某个选项卡在显式关闭之前一直处于打开状态,则只需获取一个没有“KambiBC expanded”类的所有容器的列表,并选择一个进行扩展,重复操作,直到没有更多可扩展的容器为止