Python - Selenium:元素当前不可见,可能无法操作

时间:2016-02-15 10:40:08

标签: python selenium phantomjs

我试图找出,为什么会出现以下错误:

Element is not currently visible and may not be manipulated

我想找到next按钮并单击它。

这是页面:example page

我在driver课程中有这段代码:

def click_next(self):
    try:
        self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
        self.driver.find_element_by_xpath('//li[@class="paging-item"]/a').click()
    except:
        raise
        return False

你知道问题出在哪里吗?

4 个答案:

答案 0 :(得分:4)

为什么在有xpath的确切方法时使用find_element_by_class_name来搜索类名

PhantomJS通常表现得很奇怪。很多时候由于窗口大小而导致Element is not currently visible and may not be manipulated。尝试重新调整适合我的窗口大小(在Ubuntu 14.04上使用Phantom JS 1.9.8进行测试)。

from selenium import webdriver

url = 'http://www.sreality.cz/hledani/prodej/byty/praha-2,praha-3?stavba=cihlova&vlastnictvi=osobni&strana=1'

browser = webdriver.PhantomJS()
browser.set_window_size(1920, 1080)  # choose a resolution big enough
browser.get(url)

next_arrow = browser.find_element_by_class_name('paging-next')
next_arrow.click()

答案 1 :(得分:1)

你可以试试下面的xpath吗?你的xpath实际上会返回4个匹配。

"//li[@class='paging-item']//a[@class='btn-paging-pn icof icon-arr-right paging-next']"

答案 2 :(得分:1)

您的XPath查询返回4个元素。在这种情况下,您必须知道Selenium默认采用第一个元素。如果碰巧这样的元素不可见,那么你就不能通过点击来与它进行交互。

答案 3 :(得分:0)

查看元素的位置。假设它有负数。滚动窗口,因此元素位于可见区域。

我有同样的问题,元素的位置属性是(807,-30)。下面的代码解决了这个问题

    driver.get(url)
    driver.execute_script("window.scrollTo(0, 60);")
    element = findElement(driver, "//button[contains(text(),'some text')]", WAIT_IN_SEC)

    element.click()