gpt4 book ai didi

vba - 使用 Selenium Basic (VBA) 循环访问一组页面

转载 作者:行者123 更新时间:2023-12-02 07:43:38 27 4
gpt4 key购买 nike

任务:

所以我第一次涉足 Selenium,我正在尝试:

  1. 查找 https://codingislove.com/ 底部列出的分页集中的页数这纯粹是为了通过确定循环结束来支持任务 2。
  2. 循环它们

我相信这些是有联系的,但对于那些想要单一问题的人来说。我只是想找到正确的集合并循环加载每个页面。

在撰写本文时,页数为 6,如网页底部所示,如下所示:

Pagination set

作为 MCVE,我只想找到页数并点击浏览它们。使用 Selenium Basic。

我尝试过的:

我阅读了许多在线资源,仅在引用文献中列出了一些。

任务 1)

看来我应该能够使用 Size 属性找到页数。但我似乎找不到合适的对象来使用它。我做了很多尝试;如下所示:

bot.FindElementsByXPath("//*[@id=""main""]/nav/div/a[3]").Size '<==this I think is too specific
bot.FindElementsByClass("page-numbers").Size

但是这些会产生运行时错误 438:

"Object does not support this property or method"

以下似乎没有公开所需的方法:

bot.FindElementByCss(".navigation.pagination")

我捏造了

bot.FindElementsByClass("page-numbers").Count + 1 

但想要更强大的东西

任务 2)

我知道我可以通过以下方式从第 1 页导航到下一页:

bot.FindElementByXPath("//*[@id=""main""]/nav/div/a[3]").Click

但是我不能在循环中使用它,大概是因为 XPath 需要更新。如果不更新,则会导致运行时错误 13。

Run-time error 13

由于重定向遵循以下一般模式

href="https://codingislove.com/page/pageNumber/"

我可以再次通过在循环中构建每个 URL 来欺骗自己的方式

bot.Get "https://codingislove.com/page/" & i & "/"

但我想要更强大的东西。

问题:

如何使用 selenium 以稳健的方式循环分页集? 当然,我今天度过了忙碌的一天,并且应该有一个易于定位的适当集合来循环。

代码 - 我当前的尝试

Option Explicit
Public Sub scrapeCIL()
Dim bot As New WebDriver, i As Long, pageCount As Long

bot.Start "chrome", "https://codingislove.com"
bot.Get "/"
pageCount = bot.FindElementsByClass("page-numbers").Count + 1 '

For i = 1 To pageCount 'technically can loop from 2 I know!
' bot.FindElementByXPath("//*[@id=""main""]/nav/div/a[3]").Click 'runtime error 13
' bot.FindElementByXPath("//*[@id=""main""]/nav/div/a[2]/span").Click ''runtime error 13
bot.Get "https://codingislove.com/page/" & i & "/"
Next i

Stop

bot.Quit
End Sub

注意:

任何支持的浏览器都可以。它不一定是 Chrome。

引用文献:

  1. Finding the number of pagination buttons in Selenium WebDriver
  2. http://seleniumhome.blogspot.co.uk/2013/07/how-can-we-automate-pagination-using.html

要求:

  1. Selenium Basic
  2. ChromeDriver 2.37 '或者使用 IE,但缩放必须为 100%
  3. VBE 工具 > 引用 > Selenium 类型库

最佳答案

单击元素,它必须在屏幕中可见,因此您需要先滚动到页面底部(selenium 有时可能会隐式执行此操作,但我没有发现它可靠)。

试试这个:

Option Explicit
Public Sub scrapeCIL()
Dim bot As New WebDriver, btn As Object, i As Long, pageCount As Long

bot.Start "chrome", "https://codingislove.com"
bot.Get "/"
pageCount = bot.FindElementsByClass("page-numbers").Count

For i = 1 To pageCount

bot.ExecuteScript ("window.scrollTo(0,document.body.scrollHeight);")

Application.wait Now + TimeValue("00:00:02")

On Error Resume Next
Set btn = bot.FindElementByCss("a[class='next page-numbers']")
If btn.IsPresent = True Then
btn.Click
End If
On Error GoTo 0

Next i

bot.Quit

End Sub

关于vba - 使用 Selenium Basic (VBA) 循环访问一组页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49896428/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com