首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python Selenium -元素在点上不可点击。

Python Selenium -元素在点上不可点击。
EN

Stack Overflow用户
提问于 2016-05-28 09:49:35
回答 1查看 473关注 0票数 0

我试图点击一个网页上的下一个按钮多次,我需要刮页后,每次点击。下面的代码被缩短了,但说明了我的情况。我能够在第一次单击之后刮掉所需的标记,但是第二次单击失败了。这是代码

代码语言:javascript
复制
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()

我知道这个错误

代码语言:javascript
复制
WebDriverException: Message: Element is not clickable at point

虽然当我使用beautifulSoup并在第一次单击之后获得源代码时,我再次尝试单击的元素显然是要单击的。

我读过其他的答案,我可能需要等待一段时间,但不知道如何实现。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-28 10:24:33

当您第一次单击下一页开始加载时,您不能单击仍在加载的页面上的链接,也不能单击即将被另一页替换的页面上的链接!所以这个信息是非常正确的。因此,您只需等待下一页出现,然后才能单击下一个链接。您可以只睡上N秒钟,或者,更好的是,在再次单击元素之前等待元素出现。

看看:预期条件

因此,您可能希望在每次单击时使用element_to_be_clickable。所发生的事情是等待N秒使其可点击,如果在这段时间内不采取该状态,则抛出一个异常。

以下是一篇关于所有这些的好博客文章:如何在单击后获取Selenium以等待页面加载

下面是一个简单的例子,说明如何使用它。在这里,您刚刚第一次点击了链接,然后等待下一个加载:

代码语言:javascript
复制
    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()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37497527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档