xPath适用于最后一页,但不适用于第一页-Selenium Java

时间:2018-12-15 03:15:51

标签: java selenium xpath web-scraping

我想使用Java中的Selenium从NCBI中提取一些数据

问题是xPath ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1); service.TraceEnabled = true; service.TraceFlags = TraceFlags.All; service.Credentials = new WebCredentials("XXXX@YYY.COM", "XXXXXXXX"); service.AutodiscoverUrl("XXXXXX@YYYYY.com", RedirectionUrlValidationCallback); EmailMessage email = new EmailMessage(service); email.ToRecipients.Add("abc@yahoo.com"); email.Subject = "Testing from C#"; email.Body = new MessageBody("This is the first email I've sent by using the EWS Managed API"); email.Send(); 可以在页面上获取每篇文章的标题并单击它们,它们适用于最后一页而不适用于第一页,我不明白为什么。

/html/body/div[2]/div[1]/form/div[1]/div[5]/div/div[5]/div[" + i + "]/div[2]/p/a

1 个答案:

答案 0 :(得分:2)

我怀疑这是一个偏离一处的错误,因为XPath的索引从1开始,并且div[0]在那里没有任何匹配项。

但是,通常,您的表达式非常脆弱,因为它是绝对表达式,其路径从HTML树的根部开始一直到每个父级都需要的元素。布局上的任何细微更改都会破坏它。

相反,我们可以认真简化表达式:

//div[contains(@class, 'rslt')]/p/a

这将匹配每页所有20个链接。

或者,如果您更喜欢简洁的CSS选择器:

driver.findElements(By.cssSelector(".rslt > p > a"));