【发布时间】:2020-01-12 13:30:43
【问题描述】:
我正在从一个分页的网页中抓取数据,一旦我完成了一个页面的抓取,我需要单击下一步按钮并继续抓取下一页。然后,一旦我刮掉了所有页面并且不再存在下一个按钮,我就需要停下来。下面包含我需要单击的“下一步”按钮周围的 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 clicking next button until the end
python - How to click "next" in Selenium until it's no longer available?
Python Selenium Click Next Button
Python Selenium clicking next button until the end
Selenium clicking next button programmatically until the last page
How can I make Selenium click on the "Next" button until it is no longer possible?
谁能提供有关如何选择“下一步”按钮(如果存在)并使用这组 HTML 转到下一页的建议?如果您需要对请求进行进一步说明,请告诉我。
【问题讨论】:
-
看起来另一个元素正在接收点击而不是 Next 元素。我建议您尝试向下滚动到该元素,然后尝试单击它。
-
因为它在body标签上,这可能是一个用于拦截点击的弹出窗口。尝试先单击 标记。 (这些通常设置一个标志以允许第二次点击......有时通过更改当前窗口/选项卡的位置并在第二个窗口中打开当前页面来创建一个“弹出窗口”。)发布标记和/或任何客户端脚本。
-
尝试用javascript点击它。这通常会起作用。
-
感谢大家的建议。您是否碰巧有可能的代码解决方案可以帮助解决这种情况?我明白你们在说什么,但我对 selenium 比较陌生,并且不完全确定实施您所建议的最佳方式。
标签: python-3.x selenium beautifulsoup python-requests