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 秒,或者更好的是,等待元素出现,然后再次单击它。
所以您可能希望在每次尝试点击时使用 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()
我试图多次点击网页上的下一步按钮,我需要在每次点击后抓取页面。以下代码被缩短但说明了我的情况。我可以在第一次点击后抓取所需的标签,但第二次点击失败。这是代码
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 秒,或者更好的是,等待元素出现,然后再次单击它。
所以您可能希望在每次尝试点击时使用 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()