2017-04-19 102 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。 –