感谢您试图帮助我。
我正在尝试运行带有类别的列表框。
当我点击列表框中的项目时,一切都很好,直到类别位于可见列表框下方。在这种情况下,它会抛出这个错误:
元素在点(1121.5,276)处无法点击。其他元素会 收到点击:
所以我的问题是这个。 如何点击我需要在列表框中滚动一点的元素,以便能够点击它。
我的代码的非常短的版本
listUl1 = browser.find_element_by_id('categoryManuallySelectLevel_1')
listCategories = []
# Fetch the id's
for child in listUl1.find_elements_by_xpath(".//"):
listCategories.append(child.get_attribute('id'))
# click through the items in the list
for item in listCategories:
element = WebDriverWait(browser,5,poll_frequency=.2).until(EC.visibility_of((By.ID, item)))
element.click
可在此处找到指向该网站的链接:http://www.guloggratis.dk/annonce/opret
如果您有任何疑问,请不要犹豫。我会立即通过手机回复。感谢。
答案 0 :(得分:1)
您可以使用ARROW_DOWN
listBox = driver.find_element(By.id('categoryManuallySelectLevel_1'))
counter = 1
for item in listCategories:
if counter % 4 == 0: # scroll every 4 elements or so
listBox.send_keys(Keys.ARROW_DOWN)
element = WebDriverWait(browser,5,poll_frequency=.2).until(EC.visibility_of((By.ID, item)))
element.click
counter += 1
答案 1 :(得分:0)
你需要javaScriptexecutor。
下面是java方法,可以帮助你。引用它并在python中使用它。它在python中非常相似: -
private void scrollToElementAndClick(WebElement element) {
int yScrollPosition = element.getLocation().getY();
js.executeScript("window.scroll(0, " + yScrollPosition + ");");
element.click();
}
如果不起作用则使用(不推荐): -
JavascriptExecutor executor = (JavascriptExecutor) driver;
executor.executeScript("arguments[0].click();", driver.findElement(By.<your locator>));
希望它会对你有所帮助:)。
答案 2 :(得分:0)
您也可以使用机器人方法向下滚动页面,如下所示:
Thread.sleep(1000);
Robot robot3 = new Robot();
robot3.keyPress(KeyEvent.VK_PAGE_DOWN);
robot3.keyRelease(KeyEvent.VK_PAGE_DOWN);
Thread.sleep(1000);
element = WebDriverWait(browser,5,poll_frequency=.2).until(EC.visibility_of((By.ID, item)))
element.click
counter += 1