我正在尝试从网站上抓取信息,但是使用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 :(得分:0)
我假设您的标签在运行时加载。 因此,要激活选项卡,您需要使用FindElement(By)找到选项卡并单击它,然后才能从该选项卡访问信息。
根据您的代码,没有Id发现使用FindElement(By.Id)。所以我建议您使用FindElement(By.CSSSelector)或FindElement(By.Xpath),您可以从浏览器的开发工具中复制Locator字符串,即在Google Chrome中右键单击==&gt; inspect ==&gt;复制==&gt;复制选择器或复制X路径。
获得Tab元素后,即
IWebElement tab = driver.FindElement(By.CSSSelector);
tab.Click();//Tab activated
//...Do your thing afterwards.
希望这有帮助。