【问题标题】:Traversing a Table & Clicking Links Within Using Selenium使用 Selenium 遍历表并单击其中的链接
【发布时间】:2018-12-10 13:18:02
【问题描述】:

我正在尝试使用 Java 中的 Selenium 遍历一个表(当前使用的是 chromedriver)。表格的内容由不同的人组成,并带有指向他们个人资料的链接,对于该表格中的每个人,我将进入他们的个人资料并提取一些信息。我将为 X 人做这件事。该表每页包含 5 人,我通过单击分页按钮“>”浏览页面。请参阅https://www.seleniumeasy.com/test/table-pagination-demo.html 了解表格的结构。

现在问题来了:举个例子,我目前在 exampleUrl.com/page_containing_table 然后我输入用户的个人资料并提取他们的信息,他们的 URL 类似于 exampleUrl .com/user_x。然后我使用

driver.navigate().back();

返回表格页面 (exampleUrl.com/page_ contains_table)。

问题是当我遍历表时,URL 没有改变。所以每当我从 exampleUrl.com/user_x 回到 exampleUrl.com/page_containing_table 时,我总是会在表格的第一页结束。

当我只需要从表格的第一页获取用户信息时,这很好用,但如果我需要浏览 25 页怎么办?如果我在第 11 页,那么我将能够在第 11 页检索一个用户的信息,然后我将导航回第 1 页,然后我必须再次分页到第 11 页才能再提取一个用户信息。

我尝试了什么:

  1. 我试图对所有页面进行分页以检索所有用户的链接然后单击它们,但显然我收到了StaleElementReferenceException,因为该链接当前在页面上不可见。

  2. 我还认为,每当我对表格进行分页然后切换到该特定驱动程序时,也许有一种方法可以复制驱动程序,但这也失败了。

通过 Google,我无法找到任何其他关于此的问题,所以我有点不知所措。有没有办法以某种方式保存状态,这样我就不必每次都回到第一页?

提前致谢:)

【问题讨论】:

    标签: java selenium selenium-webdriver web-scraping selenium-chromedriver


    【解决方案1】:

    我可以想到几种方法来做到这一点:

    1. 首先抓取整个表,收集每个用户个人资料页面的 URL 并将它们存储在一个数组中。一旦你完成了整个表格的抓取,循环遍历数组并导航到每个 URL 并从那里抓取你需要的东西。我认为这是最好和最快的选择。

    2. 另一种可能是 URL 包含您所在表格的页面。例如,如果您位于表格的第 5 页,则 URL 将包含类似 ?page=5 的内容。我假设情况并非如此,因为“后退”按钮完全重新开始。

    3. 另一种变化可能是页面上有一个页面计数器,例如诸如 3 4 5 > (其中 3 为粗体或未格式化等)之类的东西,表明您在哪个页面上。在离开页面之前,您可以获得该信息,然后返回表格并单击与该特定页面关联的链接。

    如果没有看到网站/页面,我不能肯定 #2 或 #3 是可行的选择。它们是基于我在其他网站上看到的猜测。

    【讨论】:

    • 谢谢!这非常有效,不知道为什么我一开始就没有考虑过……我最终选择了选项#1。选项 #2 不起作用,因为 URL 不包含表格的页面,并且正如您所提到的,后退按钮导致它完全重新开始。选项 #3 也不起作用,因为分页按钮只是“”。
    猜你喜欢
    • 2018-07-06
    • 1970-01-01
    • 1970-01-01
    • 2011-11-12
    • 1970-01-01
    • 2016-12-19
    • 2021-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多