我试图找出,为什么会出现以下错误:
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
你知道问题出在哪里吗?
答案 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()