我正在从分页的网页中抓取数据,一旦我抓取完一页,我需要单击下一个按钮并继续抓取下一页。一旦我抓取了所有页面并且下一个按钮不再存在,我就需要停止。下面包含我需要单击的“下一步”按钮周围的html。
<tr align="center">
<td colspan="8" bgcolor="#FFFFFF">
<br>
<span class="paging">
<b> -- Page 1 of 3 -- </b>
</span>
<p>
<span class="paging">
<a href="page=100155&by=state&state=AL&pagenum=2"> .
<b>Next -></b>
</a>
</span>
<span class="paging">
<a href=" page=100155&by=state&state=AL&pagenum=3">Last ->></a>
</span>
</p>
</td>
</tr>
我尝试过在类和链接文本上选择,但在我目前的尝试中,这两种方式都不适合我。
我的代码的2个例子:
while True:
try:
link = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.LINK_TEXT, "Next ->"))).click()
except TimeoutException:
break
while True:
try:
link = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CLASS_NAME, "paging"))).click()
except TimeoutException:
break
我在网上找到的所有解决方案都不起作用,并且主要以以下错误结束:
ElementClickInterceptedException: Message: element click
intercepted: Element <a href="?
page=100155&by=state&state=AL&pagenum=2">...</a> is not
clickable at point (119, 840). Other element would receive the
click: <body class="custom-background hfeed" style="position:
relative; min-height: 100%; top: 0px;">...</body>
(Session info: chrome=76.0.3809.132)
如果错误代码的其余部分对审查有帮助,请告诉我,我会用这个错误更新帖子。
我查看了以下资源,但都无济于事:
Python Selenium点击下一步按钮直到结束
python-如何在Selenium中单击“next”直到它不再可用?
蟒蛇硒点击下一步按钮
Python Selenium点击下一步按钮直到结束
Selenium以编程方式单击“下一步”按钮,直到最后一页
如何让Selenium点击“下一步”按钮,直到不再可能?
谁能给我一些建议,告诉我如何选择“下一步”按钮(如果有的话)并使用这组HTML进入下一页?请让我知道,如果你需要任何进一步的请求澄清。
听起来你在这里问了两个不同的问题:
下面是#2的解决方案--Javascript点击:
public static void ExecuteJavaScriptClickButton(this IWebDriver driver, IWebElement element)
{
((IJavaScriptExecutor) driver).ExecuteScript("arguments[0].click();", element);
}
在上面的代码中,您必须将您的WebDriver
实例转换为IJavascriptExector
,这允许您通过Selenium运行JS代码。参数元素
是您希望单击的元素——在本例中为Next按钮。
根据您的代码示例,您的Javascript单击可能如下所示:
var nextButton = driver.findElement(By.LINK_TEXT, "Next ->"));
driver.ExecuteJavascriptClickButton(nextButton);
现在,转到你的另一个问题——点击直到按钮不再可见。我将在一个< code>while循环中实现这一点,每当Next按钮不再存在时,该循环就会中断。我还建议实现一个可以检查下一个按钮是否存在的函数,并在按钮不存在的情况下忽略< code>ElementNotFound或< code>NoSuchElement异常,以避免破坏您的测试。下面是一个包含< code>ElementExists实现的示例:
public bool ElementExists(this IWebDriver driver, By by)
{
// attempt to find the element -- return true if we find it
try
{
return driver.findElements(by).Count > 0;
}
// catch exception where we did not find the element -- return false
catch (Exception e)
{
return false;
}
}
public void ClickNextUntilInvisible()
{
while (driver.ElementExists(By.LINK_TEXT, "Next ->"))
{
// find next button inside while loop so it does not go stale
var nextButton = driver.findElement(By.LINK_TEXT, "Next ->"));
// click next button using javascript
driver.ExecuteJavascriptClickButton(nextButton);
}
}
这个while
循环在每次迭代时检查Next按钮的存在。如果按钮不存在,循环就会中断。在循环中,我们每次连续单击都会调用driver.findElement
,这样我们就不会得到StaleElementReessceException
。
希望这能有所帮助。
我有一个包含36个按钮的响应网站。乍一看,我们只能看到12个按钮,我需要验证它们的文本值,我知道如何做到这一点。但问题是我需要点击下一步按钮,直到它不可见。那么在c#中如何用selenium来做呢? 此外,在单击“下一步”时,我们需要将按钮的文本存储在一个列表或数组中,这样我就可以将所有列表添加到一个新列表中并进行比较。 看看下面的代码,我试过了。 现在上面的工作正常,但当“下一步”按钮不可用时,
我想写一个代码,让Python在页面上抓取一些数据,然后单击页面底部的“下一步”按钮,在第二页上抓取一些数据,单击“下一步”按钮等,直到最后一页,在那里不再可能单击“下一步”(因为没有“下一步”)。 我想尽可能使代码通用,而不是事先指定要做的点击次数。根据这个问题(我如何让Selenium点击可变数量的“下一步”按钮?),我有下面的代码。Python不会报告任何错误,但是程序会在第一次迭代之后停止
这是我第一个问题的后续问题,我正在尝试抓取一个网站,让Selenium点击(直到无法点击为止)并收集结果。 这是来自网站的html标签,带有按钮: 我试过这个代码: 我也查过这个问题,但还是没能解决。 有什么想法吗?
在我的程序中,它将单击浏览器中的一个按钮,并且在该页面中,应该会出现另一个按钮。出现该按钮后,我的程序将立即运行下一个操作来单击下一个按钮。我目前收到此错误: ElementNotVisibleException:消息:元素不可见 因此,我假设我正在调用该操作,以便在该按钮出现之前单击下一个按钮。我的问题是,我该怎么做才能让我的程序等到我可以点击按钮,再点击按钮? 这就是我的程序底部的代码的样子。
嗨,我是一个网络抓取新手,一直在尝试使用Selenium用python抓取论坛 我想让Selenium点击"下一步",直到最后一页,但我不知道如何打破循环。 当我通过部分链接找到下一个按钮时,自动单击将继续到下一个线程,例如page1- 当我按类名找到下一个按钮时,自动单击将在到达最后一页时单击“prev”按钮 我的问题是: 我应该使用哪个定位器?(按类还是按部分链接或任何其他建议? 如何打破循环
我正试图让JQuery在按下下一个按钮时自动单击该按钮。在互联网上,我发现应该是这样的(查看JQuery部分)。但由于某种原因,它不起作用。 它们必须在同一个代码中吗? 我尝试过的:JQuery: 表单中的按钮1 HTML: 表单中的按钮2 HTML: