【问题标题】:Navigating website using selenium使用 selenium 浏览网站
【发布时间】:2017-04-19 23:42:33
【问题描述】:

我正在尝试从网站上抓取信息,但在使用 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”中抓取信息,因为它默认加载。如何导航到“Category 2”和“Category 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()

这样做不会让我像最初希望的那样按名称访问不同的选项卡,而且它可能不是最有效或非常健壮的,但它可以在我的特定情况下完成工作。

【问题讨论】:

  • 您是否尝试过通过链接文本查找元素?例如driver.find_element_by_link_text("Category 2")
  • 是的,我试过了。当我这样做时,我得到一个“NoSuchElementException”。我认为这是因为我要搜索的文本是我要单击的元素的子元素?

标签: python angularjs selenium beautifulsoup


【解决方案1】:

我假设您的选项卡在运行时加载。 因此,要激活该选项卡,您需要使用 FindElement(By) 找到该选项卡并单击它,然后才能访问该选项卡中的信息。

根据您的代码,没有找到使用 FindElement(By.Id) 的 Id。所以我建议你使用 FindElement(By.CSSSelector) 或 FindElement(By.Xpath) ,你可以从浏览器的开发工具中复制定位器字符串,即在谷歌浏览器中右键单击==>检查==>复制==>复制选择器或复制 Xpath。

获得 Tab 元素后,即

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

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

希望这会有所帮助。

【讨论】:

  • 我认为 OP 正在使用 Selenium 和 python 绑定。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
相关资源
最近更新 更多