Java Selenium不会通过xpath查找值大于99的元素

Java Selenium不会通过xpath查找值大于99的元素,java,selenium,xpath,Java,Selenium,Xpath,我试图从一个网站上获得一个特定的webelements列表。所有这些元素都有完全相同的xpath,当然除了一个数字。当我试图用下面的代码提取所有这些元素时,它工作得非常好,除非列表包含99个以上的项目。如果xpath中的数字大于99,Selenium将无法定位元素,即使(我已经测试过)xpath保持完全相同 我已经试着挑出这些项目,但Selenium的作用类似于第100个项目,而上述所有项目都不存在 我挑出了以下代码(简化): String xpath=“/html/body/div[1]/di

我试图从一个网站上获得一个特定的webelements列表。所有这些元素都有完全相同的xpath,当然除了一个数字。当我试图用下面的代码提取所有这些元素时,它工作得非常好,除非列表包含99个以上的项目。如果xpath中的数字大于99,Selenium将无法定位元素,即使(我已经测试过)xpath保持完全相同

我已经试着挑出这些项目,但Selenium的作用类似于第100个项目,而上述所有项目都不存在

我挑出了以下代码(简化):

String xpath=“/html/body/div[1]/div/div[4]/div[2]/div[1]/div/div/div/section/div/div/div/div[2]/section/ol/div[%d]/div/li/div[2]/div/div[1]”;
私有void getTextFromElements(WebDriver驱动程序){

对于(int i=0;i当我在你的代码中检查时,它有默认的最大限制。因此,在达到99后,你必须向下滚动一次。请参阅我从你的网站中提取的附件。你只能捕获网页中可用的元素。元素的其余部分将显示在你的向下滚动选项中。列表中总共有209个项目,但您无法获取它们,因为它们目前不可见

用于向下滚动

WebDriver driver = new ChromeDriver();
JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript("window.scrollBy(0, 250)", "");

请参阅

当我在您的代码中签入时,它有默认的最大限制。因此,您必须在达到99后向下滚动一次。请参阅我从您的web中提取的附件。您只能捕获网页中可用的元素。元素的其余部分将在您的向下滚动选项中显示。您的页面中总共有209个项目列表,但您无法获取它们,因为它们目前不可见

用于向下滚动

WebDriver driver = new ChromeDriver();
JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript("window.scrollBy(0, 250)", "");

请参阅

我刚刚重新检查了问题是XPath。这两种浏览器都不同

例如,假设您希望转到该列表的第一个元素 firefox的xpath是
/html/body/div[1]/div/div[4]/div[2]/div[1]/div/div/div/section/div/div/div[2]/section/ol/div[1]

在你的例子中,你正在使用的是chrome,但是当涉及到chrome时,它是
/html/body/div[1]/div/div[5]/div[2]/div[1]/div/div/div/div/section/div/div[2]/section/ol/div[1]

不知何故,路径中的第三个div标记的索引4用于firefox,索引5用于chrome。我知道这很奇怪也很罕见。请尝试更改chrome的XPath,并告诉我是否仍然存在问题。如果这起作用,则需要根据浏览器配置代码,使其采用XPath

这是chrome的xpath匹配屏幕截图


我刚刚重新检查了问题是XPath。这两种浏览器都不同

例如,假设您希望转到该列表的第一个元素 firefox的xpath是
/html/body/div[1]/div/div[4]/div[2]/div[1]/div/div/div/section/div/div/div[2]/section/ol/div[1]

在你的例子中,你正在使用的是chrome,但是当涉及到chrome时,它是
/html/body/div[1]/div/div[5]/div[2]/div[1]/div/div/div/div/section/div/div[2]/section/ol/div[1]

不知何故,路径中的第三个div标记的索引4用于firefox,索引5用于chrome。我知道这很奇怪也很罕见。请尝试更改chrome的XPath,并告诉我是否仍然存在问题。如果这起作用,则需要根据浏览器配置代码,使其采用XPath

这是chrome的xpath匹配屏幕截图



您的url是公共的吗?您可以共享吗?您是否尝试滚动到元素?此外,我建议使用String.format构建xpath。如果可能,请至少通过应用程序屏幕截图详细说明和解释。url将是great@KunduK例如,我正在尝试从以下URL的播放列表中检索所有歌曲:@AndiCo就我所知,滚动元素需要先找到它。如果我错了,请纠正我,我没有使用Selenium做过很多工作。另外,String.format非常有用,我还不知道。你的url是公共的吗?你可以共享吗?你是否尝试滚动到元素?此外,我建议使用String.format来构建xpa如有可能,请至少用应用程序截图进行详细说明和解释。URL将为great@KunduK例如,我正在尝试从以下URL的播放列表中检索所有歌曲:@AndiCover据我所知,滚动元素需要先找到它。如果我错了,请纠正我,我没有使用Selenium进行过很多工作。also,String.format非常有用,我还不知道。不幸的是,即使使用提供的代码,它也会抛出相同的错误;Selenium无法找到元素。当我查看您提供的文章时,我发现您的代码确实适用于firefox,但不适用于我正在使用的chrome(很抱歉之前没有提及这一事实)。鉴于此,我将使用以下代码:((JavascriptExecutor)driver)。executeScript(“参数[0]。scrollIntoView(true);”),元素);eBorating,这意味着我必须找到元素-我知道我无法找到。那么有什么解决方案吗(除了切换到firefox,我不能)@DFJ我很高兴听到你的代码在firefox中运行。所以答案是肯定的,你也可以使用chrome。所以你的问题可能与chrome驱动程序配置有关。你能在这里分享你的配置详细信息吗?我会尝试帮助你。那么,你的意思是,如果配置程序ion是对的?或者你的意思是,适用于firefx的代码在chrome中也适用于正确的配置?此外,我很高兴分享配置细节,不幸的是,我不知道如何读取它们,否则我会将它们添加到上面的问题中。@DFJ我想你已经得到了答案,问题是它的限制是100在播放列表中录制,并在向下滚动到li上显示的最后一个元素时动态加载