首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用实现WebDriverWait的问题

用实现WebDriverWait的问题
EN

Stack Overflow用户
提问于 2019-01-02 03:09:15
回答 1查看 345关注 0票数 1

我想遍历某些元素,然后单击它们。在这个过程中,我被建议使用Selenium的WebDriverWait,但是我面临着一些困难,经过一段时间的尝试,还没有弄清楚。

我的代码:

代码语言:javascript
复制
# finds all heart elements
hearts = driver.find_elements_by_xpath("//span[@class='fr66n']")

for h in range(len(hearts)):
    try:
        element = WebDriverWait(driver, 10).until(
            EC.element_to_be_clickable((By.XPATH, hearts[h])));
        ActionChains(driver).move_to_element(hearts[h]).click(hearts[h]).perform()
        counter += 1
        print(str(counter) + "/" + str(len(hearts)))
    except exceptions.StaleElementReferenceException as e:
        raise e

遇到的错误:

代码语言:javascript
复制
selenium.common.exceptions.InvalidArgumentException: Message: invalid argument: 'value' must be a string

它指出了这条线:

代码语言:javascript
复制
element = WebDriverWait(driver, 10).until(
      EC.element_to_be_clickable((By.XPATH, hearts[h])));

据猜测,我猜想它指的是“心”应该是一根线,但它不是已经存在了吗?希望我的解释是错误的,有人有更好的想法。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-02 03:26:44

hearts[h]是一个<element>,但是您可以使用它作为Xpath定位器(By.XPATH, hearts[h])来使用索引来选择元素。

代码语言:javascript
复制
xpathIndex = "(//span[@class='fr66n'])[{}]".format(h+1) # xpath index start from 1 not 0
# (//span[@class='fr66n'])[1]
element = WebDriverWait(driver, 10).until(
            EC.element_to_be_clickable((By.XPATH, XpathIndex)));
ActionChains(driver).move_to_element(hearts[h]).click(hearts[h]).perform()
# or
# ActionChains(driver).move_to_element(element).click(element).perform()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54000797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档