2017-02-21 21 views
0

Я стараюсь selenium на этом сайте: http://www.panachocolate.com/stockists?selemium press 'ARROW DOWN' в коробке

Вы увидите, что с левой стороны есть список адресов. По умолчанию он содержит 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 

Это даст ошибку как для щелчка и «send_keys метода»: «ElementNotVisibleException : Элемент не отображается ". Я выбираю неправильный элемент? Но нет другого элемента. Я также пробовал последний элемент адреса: // li [@ data-value = "99"] ', но не будет работать. Кто-нибудь знает, чего я здесь пропустил? Какие-либо предложения?

Env: Ubuntu, python3

ответ

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 и опубликовать код.

+0

Фантастический! Большое спасибо за подсказку !!! Я разработал версию python и просто разместил ее отдельно! – Shaowen

0

Итак, вдохновленный @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) 

 Смежные вопросы

  • Нет связанных вопросов^_^