【问题标题】:Selenium clicking loop ignored some valuesSelenium 点击循环忽略了一些值
【发布时间】:2020-11-04 13:30:15
【问题描述】:

我正在尝试运行代码:

for j in range(1,13):
    driver.find_element_by_xpath('//*[@id="gateway-page"]/body/table/tbody/tr[3]/td[2]/table/tbody/tr[2]/td[2]/table/tbody/tr/td/table/tbody/tr[2]/td/div/div[2]/ul/li['+str(j)+']').click()
    time.sleep(3)

点击website 上的每一个令人满意的元素。但是它每次都会忽略一些元素,而当我不是在 for 循环中而是单独尝试它们时它就起作用了。知道为什么会这样吗?

【问题讨论】:

    标签: python-3.x selenium automated-tests


    【解决方案1】:

    似乎问题在于/ul/li['+str(j)+'] 您正在执行点击<li> 标签,而实际链接位于其中。这就是为什么有时实际链接不会在没有任何错误的情况下收到点击,因为链接包含在 <li> 标记中。

    尝试找到实际的链接标签。使用下面的代码。我已经在我的系统上进行了测试。希望这会对你有所帮助。

    driver.get('http://catalog.sps.cuny.edu/preview_program.php?catoid=2&poid=607')
    driver.implicitly_wait(10)
    links = driver.find_elements_by_xpath("//div//h2[contains(.,'Electives')]/..//ul/li//span/a")
    
    for link in links:
        link.click()
        time.sleep(3)
    

    【讨论】:

      【解决方案2】:

      观察 xpath 后,我观察到您正在尝试单击该网站上的 Elective 选项。我认为您已将所有选修课的文本存储在 str 数组中,并使用循环,您试图点击每个选修课。

      我建议使用另一种方法。将所有选修课存储在列表中,然后遍历元素并单击它们。例如

      elements = driver.find_elements_by_xpath('///*[@id="gateway-page"]/body/table/tbody/tr[3]/td[2]/table/tbody/tr[2]/td[2]/table/tbody/tr/td/table/tbody/tr[2]/td/div/div[2]/ul/li')
      for element in elements:
          element.click()
          time.sleep()
      

      您的解决方案中可能存在的问题

      1. 您将选修课的名称存储在数组中。如果有任何拼写错误,xPath 将失效
      2. 您从 1 到 13 开始循环,但 str 的索引为 0,所以从 0 开始循环。因为在这种情况下,您总是会错过第一门选修课
      3. 每次点击后,选修课也会展开。因此,如果找不到元素,您也可以考虑滚动

      建议:

      另外,使用相对 xpaths 而不是绝对路径。相对 xpath 更稳定。

      编码愉快~

      【讨论】:

        猜你喜欢
        • 2014-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-16
        • 2013-08-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多