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

2024-06-25 23:29:23 发布

您现在位置:Python中文网/ 问答频道 /正文

谢谢你帮我。在

我试着浏览一个有分类的列表框。在

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

Element is not clickable at point (1121.5, 276). Other element would receive the click:

所以我的问题是。如何单击需要在列表框中滚动一点的元素,才能单击该元素。

我的代码的一个很短的版本

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

如果你有什么问题,尽管问。我会立刻用我的电话回复。谢谢。在


Tags: theinbrowseridchild元素forby
3条回答

您需要javaScriptexecutor来实现相同的功能。在

下面是java方法,它可以帮助您在相同的。在python中引用并使用它。它在python中非常类似于:

private void scrollToElementAndClick(WebElement element) {
    int yScrollPosition = element.getLocation().getY();
    js.executeScript("window.scroll(0, " + yScrollPosition + ");");
    element.click();
}

如果不起作用,则使用(不推荐):

^{pr2}$

希望对您有帮助:)

您可以使用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

您也可以使用Robot方法向下滚动页面,如下所示:

        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

相关问题 更多 >