Selenium webdriver 选择动态ID

Selenium webdriver 选择动态ID,selenium-webdriver,selenium-chromedriver,Selenium Webdriver,Selenium Chromedriver,我有没有办法选择上面的元素?id每次都随机生成,是css选择器(#player_uid_960859542_1)和xpath(//*[@id=“player_uid_960859542_1”])。我尝试过使用该类,但它是一个复合名称。我用.cssSelector(“.html5视频播放器.iv模块已创建.iv模块已加载.已创建endscreen.暂停模式”)尝试了但这也失败了。提到的XPath和CSS路径不起作用,因为ID的值是动态生成的,XPath和CSS都设计为在使用firebug时使用ID

我有没有办法选择上面的元素?id每次都随机生成,是css选择器(#player_uid_960859542_1)和xpath(//*[@id=“player_uid_960859542_1”])。我尝试过使用该类,但它是一个复合名称。我用.cssSelector(“.html5视频播放器.iv模块已创建.iv模块已加载.已创建endscreen.暂停模式”)尝试了
但这也失败了。

提到的XPath和CSS路径不起作用,因为ID的值是动态生成的,XPath和CSS都设计为在使用firebug时使用ID值生成路径。但是,您可以尝试以下XPath:
//*[@data version='///s.ytimg.com/yts/jsbin/player-en_US-vfl_cdzrt/base.js'][@aria label='YouTube Video player]
如果它不起作用,你可以选择在DOM中找到一个稳定的元素,然后有权在父节点、子节点或同级节点上移动(观看视频了解更多细节;链接如下)

早些时候,我遇到了非常类似的问题,经过大量的研发,我找到了许多使用XPath和CSS选择器定制来处理它的方法。 我制作了一个视频,以获得更多的见解。观看以下两个视频: 和


我相信它会对您有所帮助,因为有很多方法可以设计路径来接触该元素。

您不需要所有类来匹配该元素。您希望尽可能少,以便在该页面上唯一地匹配它。也许“html5视频播放器”就足够了?如果你的类名是语义/有意义的,也就是说不仅仅是风格上的,那么最好是以这种方式匹配,而不是根据生成的/动态的Id进行匹配。你有没有尝试过.cssSelector(“div[Id^=player]”)的
或者这不够唯一?@GregWringle你有没有像这样尝试cssSelector
div[class='html5-video-player iv模块已创建iv模块已加载endscreen已创建暂停模式']
?尝试了所有这些建议,但不幸的是,它们都没有起作用。我也尝试了不同的类名组合。这个div埋在另一个div下面有关系吗?我发现驱动程序看不到它。它隐藏在一个#documents标记后面。是否还有其他方法可以访问它?
<div class="html5-video-player iv-module-created iv-module-loaded endscreen-created paused-mode" tabindex="-1" id="player_uid_960859542_1" data-version="//s.ytimg.com/yts/jsbin/player-en_US-vfl_cdzrt/base.js" aria-label="YouTube Video Player">