使用selenium浏览网站

时间:2017-04-19 23:42:33

标签: python angularjs selenium beautifulsoup

我正在尝试从网站上抓取信息,但是使用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()

这样做不会让我像我原先希望的那样按名称访问不同的标签,并且它可能不是最有效或非常强大的,但它可以在我的特定情况下完成工作。

1 个答案:

答案 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.

希望这有帮助。