【问题标题】:How to use selenium to call angular function (ng-click)如何使用 selenium 调用 angular 函数(ng-click)
【发布时间】:2018-09-28 14:50:38
【问题描述】:

我正在尝试使用 selenium 调用角度 ng-click。这个问题基于这个javascript:

<span class="col" ng-click="getHope(1,'pray','smile')">100%</span>

这个我变成了:

driver.find_element_by_css_selector("[ng-click=getHope(1,'pray','smile')]").click()

我什至尝试添加跨度:

driver.find_element_by_css_selector("[ng-click=getHope(1,'pray','smile')]").click()

并添加:

driver.find_element_by_css_selector("span[ng-click=getHope(1,\'pray\',\'smile\')]").click()

但我会出现以下错误:

 selenium.common.exceptions.InvalidSelectorException: 
 Message: invalid selector: An invalid or illegal selector was specified

我试图模仿this link,但它不起作用。我做错了什么?

【问题讨论】:

    标签: python angular selenium xpath css-selectors


    【解决方案1】:

    根据您在所需元素上共享给click() 的 HTML,您可以使用以下任一定位器策略

    • xpath

      driver.find_element_by_xpath("//span[@class='col' and contains(.,'100%')]").click()
      
    • xpath

      driver.find_element_by_xpath("//span[@class='col' and starts-with(@ng-click,'getHope') and contains(.,'100%')]").click()
      
    • css_selector

      driver.find_element_by_css_selector("span.col[ng-click^='getHope']").click()
      

    【讨论】:

    • 这确实有效,但还有更多包含“100%”的跨度。这只选择第一个。对不起,我应该提到它。
    • @nappingkid 添加了更多选项,检查其中是否满足您的需求。让我知道状态。
    • 这比我看到的要复杂一些。这些解决方案只选择第一个跨度。有两个相同的 div 包含这些跨度为 100%。 div 的唯一区别是它们包含
      100%
      另一个包含
      100%
      我可以使用此信息指定选择更多?
    • 在我的回答中签出 secondthird 选项。
    • 两者都试过了,但他们仍然只选择第一个跨度。我意识到这个网站不是为爬虫设计的。
    【解决方案2】:

    试试下面的 XPath 选择器:

    driver.find_element_by_xpath("//span[@ng-click=\"getHope(1,'pray','smile')\"]").click()
    

    但更好的解决方案 (IMO) 是直接使用 JS 执行器执行函数 getHope

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-27
      • 2018-02-07
      • 1970-01-01
      • 2015-02-27
      • 2017-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多