Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用selenium调用角度函数(ng单击)_Python_Angular_Selenium_Xpath_Css Selectors - Fatal编程技术网

Python 如何使用selenium调用角度函数(ng单击)

Python 如何使用selenium调用角度函数(ng单击),python,angular,selenium,xpath,css-selectors,Python,Angular,Selenium,Xpath,Css Selectors,我试图使用selenium调用一个有角度的ng单击。此问题基于以下javascript: <span class="col" ng-click="getHope(1,'pray','smile')">100%</span> 我甚至尝试添加span: driver.find_element_by_css_selector("[ng-click=getHope(1,'pray','smile')]").click() 并加入: driver.find_element_by

我试图使用selenium调用一个有角度的ng单击。此问题基于以下javascript:

<span class="col" ng-click="getHope(1,'pray','smile')">100%</span>
我甚至尝试添加span:

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

我试着模仿,但不起作用。我做错了什么?

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

  • xpath

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

    driver.find_element_by_xpath("//span[@class='col' and contains(.,'100%')]").click()
    
    driver.find_element_by_xpath("//span[@class='col' and starts-with(@ng-click,'getHope') and contains(.,'100%')]").click()
    
  • css\u选择器

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

尝试以下XPath选择器:

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

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

这确实有效,但还有更多的跨度包含“100%”。这只会选择第一个。对不起,我应该提一下。@nappingkid添加了更多选项,请检查这些选项是否满足您的需要。让我知道情况。这比我看到的要复杂一点。这些解决方案仅选择第一个跨度。有两个相同的div包含这些跨度为100%。div的唯一不同之处是它们包含100%另一个包含100%我可以使用此信息进一步指定选择吗?签出我答案中的第二个和第三个选项。尝试了这两个选项,但它们仍然仅选择第一个跨距。我意识到这个网站不是为刮刀设计的。