【问题标题】:selemium press 'ARROW DOWN' within a box硒在盒子内按“向下箭头”
【发布时间】:2017-02-21 13:42:22
【问题描述】:

我正在这个网站上尝试 selenium:http://www.panachocolate.com/stockists?

您可以看到左侧有一个地址列表。默认情况下,它列出 100 个地址。如果我想查看更多内容,我需要将框向下滚动到最后以触发“更多地址”事件。我以为很简单,只有 2-3 步:

  1. 找到那个地址框

  2. 可以点击吗?

  3. 按向下箭头按钮。

所以,有了这个想法,我想出了以下代码(不起作用):

from selenium.webdriver.common.keys import Keys
from selenium import webdriver

driver = webdriver.Firefox()
driver.get('http://www.panachocolate.com/stockists?')
elem = driver.find_element_by_xpath('//ol[@class="storeList rounded-
list"]')
elem.click()
elem.send_keys(Keys.ARROW_DOWN)
# Keys.PAGE_DOWN, Keys.SPACE also won't work

'click' 和 'send_keys method' 都会出现错误:'ElementNotVisibleException: Element is not visible'。我选择了错误的元素吗?但是那里没有其他元素。我也尝试了最后一个地址元素'//li [@data-value =“99”]',但不起作用。有人知道我在这里错过了什么吗?有什么建议吗?

环境:Ubuntu、python3

【问题讨论】:

    标签: python python-3.x selenium selenium-webdriver


    【解决方案1】:

    我不确定 python 中的代码,但我可以给你一个关于你正在寻找的方法的公平想法。

    使用 Action 类来执行滚动或移动滚动条。 Java中的代码如下。

    Actions move = new Actions(driver);
    move.moveToElement(draggablePartOfScrollbar).clickAndHold().‌​moveByOffset(0,numbe‌​rOfPixelsToDragTheSc‌​rollbarDown).release‌​().perform();
    

    或者

     WebElement slider = driver.findElement(By.xpath('//ol[@class="storeList rounded-
    list"]'));
     Actions move = new Actions(driver);
         Action action = (Action) move.dragAndDropBy(slider, 30, 0).build();
        action.perform();
    

    或者

    Actions move = new Actions(driver);
    //here you specify the condition for the scrolling length 
    move.moveToElement(slider).click(slider).sendKeys(Keys.ARROW_DOWN).perform();
    

    抱歉,我无法在 Python 中为您提供确切的代码,但这种方法可以帮助您。

    如果它不起作用,请告诉我,我将尝试在 java 中实现它并发布代码。

    【讨论】:

    • 太棒了!非常感谢提示!!!我已经搞定了python版本,单独贴出来!
    【解决方案2】:

    因此,受@Dharam 的启发,我用python 制定了解决方案。拖动滚动条,就可以了!请注意,我将浏览器驱动程序从 Firefox 更改为 Chrome,因为 firefox 似乎在处理动作链方面存在问题。

    import time
    from selenium import webdriver
    from selenium.webdriver.common.action_chains import ActionChains
    from selenium.common.exceptions import NoSuchElementException
    driver = webdriver.Chrome()
    driver.get('http://www.panachocolate.com/stockists?')
    
    while True:
        try:
            # keep dragging till the last address show up
            driver.find_element_by_xpath('//li[@ data-value="2434"]')
            break
        except NoSuchElementException:
            actions = ActionChains(driver)
            # grab the sliding bar
            source = driver.find_element_by_xpath('//div[@class="jspDrag"]')
            # grab any element at the bottom of page 
            target = driver.find_element_by_xpath('//div[@class="footer-container"]')
            # drag, drag, drag....
            actions.drag_and_drop(source,target).perform()
            time.sleep(1)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-22
      • 1970-01-01
      • 2019-08-21
      • 2013-04-02
      • 2023-03-22
      • 1970-01-01
      • 2021-03-01
      • 2018-11-15
      相关资源
      最近更新 更多