我试图点击一个网页上的下一个按钮多次,我需要刮页后,每次点击。下面的代码被缩短了,但说明了我的情况。我能够在第一次单击之后刮掉所需的标记,但是第二次单击失败了。这是代码
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并在第一次单击之后获得源代码时,我再次尝试单击的元素显然是要单击的。
我读过其他的答案,我可能需要等待一段时间,但不知道如何实现。
发布于 2016-05-28 10:24:33
当您第一次单击下一页开始加载时,您不能单击仍在加载的页面上的链接,也不能单击即将被另一页替换的页面上的链接!所以这个信息是非常正确的。因此,您只需等待下一页出现,然后才能单击下一个链接。您可以只睡上N秒钟,或者,更好的是,在再次单击元素之前等待元素出现。
看看:预期条件
因此,您可能希望在每次单击时使用element_to_be_clickable。所发生的事情是等待N秒使其可点击,如果在这段时间内不采取该状态,则抛出一个异常。
以下是一篇关于所有这些的好博客文章:如何在单击后获取Selenium以等待页面加载
下面是一个简单的例子,说明如何使用它。在这里,您刚刚第一次点击了链接,然后等待下一个加载:
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()https://stackoverflow.com/questions/37497527
复制相似问题