2017-04-19 110 views
0

我試圖從網站上刮取信息,但在使用Selenium瀏覽時遇到了問題。該網站使用ng-click來更新表格,所以我必須激活頁面上的不同選項卡才能獲取我想要的信息。這是生成選項卡的HTML:使用硒瀏覽網站

<ul class="tabs swiper-wrapper" ng-class="{'swiper-wrapper' : swiperActive }"> 
    <li ng-repeat="category in Report.Winners track by $index" ng-click="updateCategory(category.key)" ng-class="{'active' : category.key == activeCategory, 'swiper-slide' : swiperActive }" class="ng-scope active"> 
     <p class="category text-small ng-binding">Category 1</p> 
     <p class="winner"> 
     </p> 
    </li><li ng-repeat="category in Report.Winners track by $index" ng-click="updateCategory(category.key)" ng-class="{'active' : category.key == activeCategory, 'swiper-slide' : swiperActive }" class="ng-scope"> 
     <p class="category text-small ng-binding">Category 2</p> 
     <p class="winner"> 
     </p> 
    </li><li ng-repeat="category in Report.Winners track by $index" ng-click="updateCategory(category.key)" ng-class="{'active' : category.key == activeCategory, 'swiper-slide' : swiperActive }" class="ng-scope"> 
     <p class="category text-small ng-binding">Category 3</p> 
     <p class="winner"> 
     </p> 
    </li> 
</ul> 

我已經想出瞭如何從「類別1」中刪除信息,因爲它默認加載。我如何導航到「第2類」和「第3類」,以便我可以刮這些呢?謝謝!

更新:
最後我用這個來找到每個類別中的鏈接:

available_categories_links = browser.find_elements_by_css_selector("ul > [ng-click*=updateCategory]") 

然後我遍歷他們是這樣的:

for x in range(len(available_categories_links)): 
    available_categories_links[x].click() 

這樣做,這樣不允許我像最初希望的那樣按名稱訪問不同的標籤,它可能不是最高效或非常強大的標籤,但它可以在我的特定情況下完成工作。

+0

您是否嘗試過通過鏈接文本查找元素?例如'driver.find_element_by_link_text(「Category 2」)' –

+0

是的,我試過了。當我這樣做時,我會得到一個「NoSuchElementException」。我想這是因爲我想要搜索的文本是我想單擊的元素的子元素? – dataryne

回答

0

我假設你的標籤在運行時加載。 因此,要激活選項卡,您需要使用FindElement(By)來查找選項卡並單擊它,然後才能從該選項卡訪問信息。

根據您的代碼,找不到Id使用FindElement(By.Id)。所以我建議你使用FindElement(By.CSSSelector)或FindElement(By.Xpath),你可以從瀏覽器的開發工具中拷貝定位器字符串,也就是在Google Chrome中右擊==> inspect ==> Copy ==> Copy Selector或複製Xpath。

後你有接頭​​元件,即

IWebElement tab = driver.FindElement(By.CSSSelector); 

tab.Click();//Tab activated 
//...Do your thing afterwards. 

希望這有助於。

+0

我認爲OP使用的是與Python綁定的Selenium。 –