社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

Declan • 5 年前 • 1552 次点击  

我最近一直在做一个个人项目来改进我的编程。我对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
 
1552 次点击  
文章 [ 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)