首页 文章

使用selenium python从列表中选择网页中的特定元素

提问于
浏览
0

我试图通过selenium python自动化,从网页中的元素列表中选择一个特定的元素 . 这是在网页的第一页我从显示的5个项目中选择一个列表项,稍后我需要在列出所有五个数字的网站的下一页中取消选择它们 . 如何选择我在网页第一页中选择的特定元素?

第一个页面列表项的HTML代码如下所示 - >

<li class="ng-scope" ng-repeat="line in accountLines">
<label class="list-item inline-group">
<div class="inline-group-addon">
<div class="inline-group-main">
<p class="ng-binding">
</div>

我已经生成xpath为:

.//*[@id='oobe-login']/body/div[1]/main/div/div[1]/ul/li[1]/label/div[2]/p
.//*[@id='oobe-login']/body/div[1]/main/div/div[1]/ul/li[2]/label/div[2]/p
.//*[@id='oobe-login']/body/div[1]/main/div/div[1]/ul/li[3]/label/div[2]/p
.//*[@id='oobe-login']/body/div[1]/main/div/div[1]/ul/li[4]/label/div[2]/p
.//*[@id='oobe-login']/body/div[1]/main/div/div[1]/ul/li[5]/label/div[2]/p

并且下一页的HTML代码列出了所有元素:

li class="ng-scope" ng-repeat="line in allLinesList">
<a class="list-item inline-group reverse highlight" ng-click="expandSettings($index)" ng-class="(settings.selectedLine === $index && settings.expanded) ? 'active' : ''" href="">
</li>

我在这里做一个文本检查,这是一种硬编码类型,用于选择我在第一页中选择的数字 .

任何人都可以建议我一个解决方案,以便selenium webdriver点击下一页中的每个元素并检查它是否已注册,如果已注册,则取消注册它?请帮忙 .

1 回答

  • 1

    我不确定你使用的是哪个网络驱动程序,但我在这里包含的代码片段对我有用,包括Firefox,Chrome和CasperJS驱动程序 .

    要单击下拉列表中的选项,您将需要使用上面的XPATH属性之一:

    opt_button = driver.wait.until(EC.element_to_be_clickable((By.XPATH, """.//*[@id='oobe-login']/body/div[1]/main/div/div[1]/ul/li[1]/label/div[2]/p""")))
    try:
        opt_button.click() #This is the part that actually selects the option
        print "Clicked the list item!"
    except ElementNotVisibleException, s:
        print "Could not click the list item..."
        print "Error: "+str(s)
    

    Selenium提供了等待元素加载和可点击的功能,因此告诉驱动程序等待它通常是防止缓慢加载页面错误的好方法 .

    至于取消选择该选项,您必须具有提供NULL选择的列表或页面上的脚本以清除页面加载时的选择 . 我对JavaScript不太满意,但我相信可能有一种方法可以注入脚本来取消选择列表项 . 您可能想要在Google上搜索使用JS清除列表选择的方法,但我相信为了做到这一点,需要满足条件 .

相关问题