我正在尝试使用Java中的Selenium(当前使用chromedriver)遍历一个表。该表的内容由具有指向其个人资料链接的不同人员组成,对于该表中的每个人,我将进入其个人资料并提取一些信息。我将为X人数这样做。该表每页包含5个人,我单击“>”分页按钮来浏览页面。有关表格的结构,请参见https://www.seleniumeasy.com/test/table-pagination-demo.html。
此问题已解决:例如,我目前在 exampleUrl.com/page_ contains_table 中,然后输入用户个人资料并提取其信息,其URL类似于 exampleUrl .com / user_x 。然后,我使用
driver.navigate().back();
返回表格页面(exampleUrl.com/page_ contains_table)。
问题是,当我遍历表格时,URL不会更改。因此,每当我从 exampleUrl.com/user_x 返回到 exampleUrl.com/page_ contains_table 时,我总是会停留在表格的第一页。
当我只需要从表格的第一页获取用户信息时,这种方法就很好用,但是如果我需要浏览25页怎么办?如果我在第11页上,那么我将能够在第11页上检索一个用户的信息,然后我将导航回第1页,然后我不得不再次翻页到第11页,以便能够再提取一个用户信息。
我尝试过的事情:
我试图只对所有页面进行分页以检索所有用户的链接,然后单击它们,但是我显然收到了StaleElementReferenceException
,因为该链接当前在页面上不可见。
我还认为,每当我对表进行分页然后切换到该特定驱动程序时,也许就有一种复制驱动程序的方法,但这也失败了。
通过Google,我无法找到与此有关的其他任何问题,所以我有点茫然。有什么方法可以保存状态,这样我就不必每次都回到第一页了?
预先感谢:)
答案 0 :(得分:0)
我可以想到几种方法:
首先擦除整个表,收集每个用户的个人资料页面的URL并将其存储在数组中。抓取整个表后,遍历数组并导航到每个URL,然后从那里抓取所需内容。我认为这是最好,最快的选择。
另一种可能性是该URL包含您所在表格的页面。例如,如果您在表的第5页上,则URL将包含类似?page=5
的内容。我认为情况并非如此,因为“后退”按钮已完全重新开始。
另一种变化可能是页面上有一个页面计数器,例如类似于<1 2 3 4 5>(其中3为粗体或未格式化等)之类的内容,用于指示您所在的页面。在离开页面之前,您可以获取该信息,然后返回表格并单击与该特定页面关联的链接。
在没有看到站点/页面的情况下,我不能肯定地说#2或#3是可行的选择。它们是根据我在其他网站上看到的内容得出的猜测。