7

このページのメインメニュー ( l​​inio ) には 11 個のリンクがあります。9 (背景が灰色でホバーするとサブメニューが表示されるもの) のみに関心があります。

9 つのオプションからサブメニューのすべての要素をクリックしたい。望ましいプロセスは次のとおりです。

1.-最初のセクション:「Celulares y Tablets」。
2.-「Celulares y スマートフォン」に移動します。このページをクリックしてご覧ください。
3.-いくつかのデータを抽出します(チェックしました、私はこれを行うことができました)。

4.-「Celulares y Tablets」の次のサブメニューに進みます。それは「アクセソリオセルラー」です。

5.-いくつかのデータを抽出し、次のサブメニューに進みます。このセクションのすべてのサブメニューを終了したら、次の大きなセクション「TV-Audio-y-Foto」に進みます。

などなど、9 つのセクションで。

HTML 構造体

ソースコードを見ると、これにたどり着きました:

1.- メイン ヘッダー: メイン ヘッダーは「nav」タグ内にあります。

<nav id="headerMainMenu>

2.-「nav」タグの内側には「ul」があり、内側のすべての「il」には、9 つ​​のセクションのそれぞれの「id」があります。

<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.- il 要素内には、必要なリンクを含む div 要素があります<a>。class="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

※この質問は参考になると思います。しかし、私はそれを取得しません。

**私のCSSは大丈夫だと思います。

4

3 に答える 3

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
于 2015-09-15T07:38:49.680 に答える
0

問題の要素の親要素のいずれかに 'display: invisible' 属性がある場合、その子要素はすべて Selenium から見えなくなるため、JavaScript でそのようなシナリオをハックし、Javascript のクリックを使用してクリックする必要があります。注: 悪影響を与える可能性があります。

于 2015-09-08T15:09:59.660 に答える