Py学习  »  Python

selenium python html解析:使用$ctrl访问元素

Declan • 5 年前 • 1522 次点击  

我最近一直在做一个个人项目来改进我的编程。我对python比较陌生。

我想做的是从一个网站上搜集一些数据(大约100-200条)。我已经设法做到了一些元素,但不是其他。我试图提取的文本是“alpha电子竞技”,但是selenium似乎无法识别这个类名。

<span ng-class="$ctrl.className"> Alpha Esports </span>

我相信$ctrl和angularjs有关。span标记包含在div标记中,如下所示:

<div class="ui-scoreboard-coupon-template__content--vertical-container"> <!----><div class="ui-scoreboard-coupon-template__content--vertical-aligner" ng-if="!$ctrl.viewModel.isAmericanEvent"> <div> <!----><div class="ui-scoreboard-coupon-template__cell__spacer" ng-if="!$ctrl.viewModel.inPlay"></div><!----> <!----> <div class="ui-scoreboard-coupon-template__cell"> <ui-scoreboard-runner class="ui-scoreboard-runner ui-scoreboard-runner__home" name="$ctrl.viewModel.home">
<span ng-class="$ctrl.className"> Alpha Esports </span> </ui-scoreboard-runner> </div> </div> <div class="ui-scoreboard-coupon-template__row__space"></div> <div> <!----><div class="ui-scoreboard-coupon-template__cell__spacer" ng-if="!$ctrl.viewModel.inPlay"></div><!----> <!----> <div class="ui-scoreboard-coupon-template__cell"> <ui-scoreboard-runner class="ui-scoreboard-runner ui-scoreboard-runner__away" name="$ctrl.viewModel.away">
<span ng-class="$ctrl.className"> G-Rex </span> </ui-scoreboard-runner> </div> </div> </div><!----> <!----> </div>

我考虑过使用xpath,但每个数据段的xpath都不同,我不知道如何创建“动态”xpath。 当我尝试使用父标记的类名时,它不会返回任何元素。我已经尝试了上面代码摘录中的所有类名。

teams = []
teams = driver.find_elements_by_class_name("ui-scoreboard-coupon-template__content--vertical-container")

最后,我认为$ctrl可能已经初始化为代码中前面的一些内容,但这是它的第一次使用:

<div class="collapsed-header collapsed-header--show" ng-show="$ctrl.showCollapsedHeader" ng-class="{'collapsed-header--show': $ctrl.showCollapsedHeader}">
    <div class="frame-layout">
        <div class="left-hand-side">
            <a class="collapsed-header__logo" ng-href="/bet" href="/bet">
              <svg class="collapsed-header__img">
                  <use xlink:href="sprite_9c5b742d050f5c4b58fe55f82f78c576.svg#logos-header_logo-usage"></use>
              </svg>
            </a>
        </div>
        <div class="center"></div>
        <div class="right-hand-side"></div>
    </div>
</div>

关于研究/阅读什么的任何提示都会被广泛接受,因为我有点被angularjs的概念和selenium的实现所淹没。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/40569
 
1522 次点击  
文章 [ 2 ]  |  最新文章 5 年前
DebanjanB
Reply   •   1 楼
DebanjanB    6 年前

提取文本 阿尔法电子竞技 ,因为元素是 Angular 元素,你必须诱导 网络驱动器 对于 定位元素的可见性 您可以使用以下任一解决方案:

  • CSS_SELECTOR :

    myText = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.ui-scoreboard-coupon-template__content--vertical-aligner div:nth-child(2) ui-scoreboard-runner.ui-scoreboard-runner.ui-scoreboard-runner__home>span[ng-class]"))).get_attribute("innerHTML")
    
  • XPATH :

    myText = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[@class='ui-scoreboard-coupon-template__content--vertical-aligner']//following::div[2]//ui-scoreboard-runner[@class='ui-scoreboard-runner ui-scoreboard-runner__home']/span[@ng-class]"))).get_attribute("innerHTML")
    
  • 注意:必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
KunduK
Reply   •   2 楼
KunduK    6 年前

我试过了 XPath 而且有效。请试着告诉我。

print(driver.find_element_by_xpath("//ui-scoreboard-runner[@class='ui-scoreboard-runner ui-scoreboard-runner__home']/span").text)