Python 抓取 - Selenium - 元素在该点不可点击

Python Scraping - Selenium - Element is not clickable at point

我试图多次点击网页上的下一步按钮,我需要在每次点击后抓取页面。以下代码被缩短但说明了我的情况。我可以在第一次点击后抓取所需的标签,但第二次点击失败。这是代码

from selenium import webdriver  
from selenium.common.exceptions import NoSuchElementException  
from selenium.webdriver.common.keys import Keys  

browser = webdriver.Firefox()  
browser.get('http://www.agoda.com/the-coast-resort-koh-phangan/hotel/koh-phangan-th.html') 
browser.find_element_by_xpath("//a[@id='next-page']").click()
browser.find_element_by_xpath("//a[@id='next-page']").click()

browser.quit()

我收到这个错误

WebDriverException: Message: Element is not clickable at point

尽管当我使用 beautifulSoup 并在第一次单击后获取源代码时,我尝试再次单击的元素显然可以单击。

我已经阅读了其他答案,我可能需要等待一段时间,但不确定如何实现。

第一次单击下一页开始加载时,您无法单击仍在加载的页面上的 link 或正在加载的页面上的 link即将被另一页取代!所以这个消息是完全正确的。所以你只需要等待下一页出现,然后你就可以点击下一个link。您可以只休眠 N 秒,或者更好的是,等待元素出现,然后再次单击它。

看看:Expected Conditions

所以您可能希望在每次尝试点击时使用 element_to_be_clickable。发生的事情是它等待 N 秒使其可点击,如果在那段时间没有进入该状态,它会抛出异常。

这里有一个很好的博客post:How to get Selenium to wait for page load after a click

这是一个简单的示例,说明如何使用它。在这里你第一次点击了link,然后等待下一次加载你可以:

    xpath = "//a[@id='next-page']"
    WebDriverWait(browser.webdriver, 10).until(
        expected_conditions.element_to_be_clickable((By.XPATH, xpath)))
    browser.find_element_by_xpath(xpath).click()