2015-09-05 4 views
7

Главное меню этой страницы (linio) содержит 11 ссылок. Интересует только 9 (с серым фоном и показом подменю при зависании).RSelenium: нажмите на невидимый объект - ElementNotVisibleException

Я хочу щелкнуть каждый элемент в подменю из 9 вариантов. Требуемый процесс:

1.-Первый раздел: «Celulares y Tablets».
2.-Перейти к: «Celulares y Smartphones». Нажмите на эту страницу.
3.-Извлеките некоторые данные (проверено, я смог это сделать).

4.-Перейти к следующему подменю в «Celulares y Tablets». Что такое: «Accesorios Celular».

5.-Извлеките некоторые данные и перейдите к следующему подменю. После выполнения всех подменю в этом разделе я перейду к следующему большому разделу: «TV-Audio-y-Foto».

И так далее с 9 разделами.

HTML Estructure

Глядя исходный код, я пришел к этому:

1.- Главный заголовок: основной заголовок в 'нав' тег:

<nav id="headerMainMenu> 

2.- Внутри метки «nav» находится «ul», и каждый «il» внутри имеет и «id» для каждого из 9 разделов:

<nav id="headerMainMenu> 
    <ul> 
     <il id = "category-item-celulares-y-tablets"><a href="..."></il> 
     <il id = "category-item-celulares-y-tablets"><a href="..."></il> 
     <il id = "category-item-celulares-y-tablets"><a href="..."></il> 
    </ul> 
</nav> 

3.- Внутри элементов иль есть DIV элементы, содержащие ссылки нам нужно: Пожалуйста, обратите внимание на <a> с классом = «subnav__title».

<nav id="headerMainMenu> 
    <ul> 
     <il id = "category-item-celulares-y-tablets"><a href="..."> 
      <div class="col-3"> 
       <a href="..."class="subnav__title">TV y Video</a> 
     </il> 
     <il id = "category-item-celulares-y-tablets"><a href="..."></il> 
     <il id = "category-item-celulares-y-tablets"><a href="..."></il> 
    </ul> 
</nav> 

4.- Использование RSelenium для перехода к каждой секции:

library(RSelenium) 
library(rvest) 
#start RSelenium 
checkForServer() 

startServer() 

remDr <- remoteDriver() 

remDr$open() 

#navigate to your page 
remDr$navigate("http://www.linio.com.pe/") 


#Accesing the first submenu from "Category Celulares y Tablets 
webElem <- remDr$findElement(using = 'css', value = "#category-item-celulares-y-tablets a.subnav__title") 


webElem$sendKeysToElement(list(key = "enter")) 

Но делать это показывает эту ошибку:

> webElem$sendKeysToElement(list(key = "enter")) 
Error: Summary: StaleElementReference 
    Detail: An element command failed because the referenced element is no longer attached to the DOM. 
    class: org.openqa.selenium.StaleElementReferenceException 

* Я думаю, что это question может быть Помогите. Но я этого не понимаю.

** Я думаю, что мой CSS - это хорошо.

ответ

0

Если какой-либо из вашего родительского элемента рассматриваемого элемента имеет атрибут «display: invisible», то весь его дочерний элемент будет невидим для селена, поэтому вам придется взломать такой сценарий с помощью JavaScript и нажать на него, используя Javascript нажмите кнопку. Примечание. Это может иметь неблагоприятные последствия.

1

Я использовал следующий код для Python. Я уверен, что он может быть конвертирован в ваш язык:

def click_hidden(self, css_selector): 
    ''' 
    Click on a hidden element using javascript. 

    Selenium will error if the element doesn't excist and if javascript fails 

    REASON: Selenium doesn't allow clicks on hidden elements since the user won't either 
      So be sure the element would be visible in normal uses! 
    ''' 
    element = self.find_css(css_selector) 
    self.execute_script("$(arguments[0]).click();", element) 
    return element 
+0

Спасибо, что попробовали @MatZeg. Я думаю, что у Чуй есть ответ. Мне нужно проверить его, чтобы дать ему полный кредит. Но спасибо! –

1

Сначала вам нужно щелкнуть по родительскому меню. Затем, когда подменю видно, нажмите на подменю.

parentMenuElement <- remDr$findElement(
    using = 'css', 
    value = "#category-item-celulares-y-tablets") 
parentMenuElement.click() 

childMenuElement <- remDr$findElement(
    using = 'css', 
    value = "#category-item-celulares-y-tablets a.subnav__title") 
childMenuElement.click() 

Возможно, вам также потребуется убрать модальное всплывающее окно, которое иногда появляется.

+0

Спасибо Чуй, я попробую это. Можете ли вы опубликовать и обновить содержимое части всплывающего окна? Как уволить? Благодаря! –

+0

К сожалению, всплывающее окно не появилось снова для меня. Вы должны найти кнопку [x] с помощью CSS, и если она нажата, нажмите на нее. –

+0

Привет, Чуй, я не понимаю, почему нужно щелкнуть по главному меню? В обычном браузере он активируется при «зависании», а не «щелчке». Пожалуйста, дайте объяснение? –