C# 使用Selenium在网页上查找元素
我有C# 使用Selenium在网页上查找元素,c#,selenium,xpath,selenium-webdriver,C#,Selenium,Xpath,Selenium Webdriver,我有XPath /html/body/div[@id='page']/div[@id='page-inner']/div[@id='main-box']/div[@class='in1']/div[@id='content-and-context']/div[@id='content']/div[@class='under-bar']/table[@class='flights']/tbody/tr[@id='flight-932539']/td[2]: 但班机号码正在改变。我可以找到部分为X
XPath
/html/body/div[@id='page']/div[@id='page-inner']/div[@id='main-box']/div[@class='in1']/div[@id='content-and-context']/div[@id='content']/div[@class='under-bar']/table[@class='flights']/tbody/tr[@id='flight-932539']/td[2]:
但班机号码正在改变。我可以找到部分为XPath的元素吗?
我使用foreach()
并为每次飞行写入数据
这是html代码:
第一件事:不要使用绝对路径。即使html中最小的更改也会使路径无效,尤其是在动态应用程序中。您的
xpath
很容易被//tr[@id='flight-932539']/td[2]
至于您的问题,您可以使用contains()
作为部分id
//tr[contains(@id, 'flight-')]/td[2]
正如上面提到的xpath,同样,您可以轻松地使用findElements查找所有航班详细信息,然后使用for循环执行相应的操作
List<WebElement> WebElements = driver.findElements(By.xpath("//tr[contains(@id, 'flight-')]/td[2]");
for(WebElement element : WebElements){
//perform any operation like for click you can use
element.getText();
}
List WebElements=driver.findElements(By.xpath(“//tr[contains(@id,'flight-'))]/td[2]”);
for(WebElement:WebElements){
//执行您可以使用的任何操作,如单击
元素getText();
}
上面的例子是用JAVA编写的,您也可以用C#编写
你为什么不一次获取所有航班的数据呢?你也可以共享我们需要获取数据的链接,这样我就可以看到元素是如何出现的等等。@Rastislav:将你的问题改为显示图片。我要拍摄文本。我需要日期。@RastislavSrnánek,作为回答者,很难猜测你的网站是什么样子以及如何显示的获取所需数据。使用适当的
HTML
code示例或页面URL
更新您的问题,以获得更好的答案。确定后,您可以使用element.getText(),也更新了代码片段。请尝试。只是想一想,如果元素在frame/iframe或svg元素中,我已经观察到chrome和firefox驱动程序无法检测基于逻辑XPath的元素。虽然在本例中OP没有提到元素是在默认内容上还是在frame/iframe上。ThanksThanks各位,我还有一个问题,这是我的代码:我需要得到文本:“Axis Vega3”,我不使用类名和内容,因为它会改变。有什么解决方案吗?@Rastislavsrnaánek类Axis
也会改变吗?不太可能。你可以使用driver.FindElement(By.XPath(//div[@class='赞助商Axis'])).GetAttribute(“title”)
获取文本。顺便说一句,更多的问题应该作为新问题发布,而不是在评论中。是的,它正在发生变化。@RastislavSrnánek您应该发布新问题以及所有细节,这样会更容易帮助您。