如何单击列表框中需要滚动到该元素的元素?

时间:2016-04-01 06:45:20

标签: python selenium selenium-webdriver

感谢您试图帮助我。

我正在尝试运行带有类别的列表框。

当我点击列表框中的项目时,一切都很好,直到类别位于可见列表框下方。在这种情况下,它会抛出这个错误:

  

元素在点(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

如果您有任何疑问,请不要犹豫。我会立即通过手机回复。感谢。

3 个答案:

答案 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