Web 元素可见并已启用,但 .click() 在 python selenium 中与 phantomJS 失败

Web-element is visible and enabled but .click() fails in python selenium with phantomJS

我想单击 https://free-proxy-list.net/ 上的 Next 按钮。 XPATH 选择器是 //*[@id="proxylisttable_next"]/a

我用下面的代码来做到这一点:

element = WebDriverWait(driver, 2, poll_frequency = 0.1).until
(EC.visibility_of_element_located((By.XPATH, '//*[@id="proxylisttable_next"]/a')))
    if (element.is_enabled() == True) and (element.is_displayed() == True):
        element.click()
        print "next button located and clicked" # printed in case of success

随后,我从 table 中获取所有 IP,如下所示:

IPs = WebDriverWait(driver, 2, poll_frequency = 0.1).until
(EC.presence_of_all_elements_located((By.CSS_SELECTOR, ':nth-child(n) > td:nth-child(1)')))

尽管所有选项卡的 CSS_selector 都相同,而且我得到 next button located and clicked,但两个选项卡的 IP 输出相同(即 Next - 按钮从未被点击)。 此外,没有抛出异常。

因此,我的方法肯定有根本性的错误。

如何使用 python/selenium 在 phantomJS 中正确点击可见和启用的按钮?

为了您的理解,这里是我所指的页面部分的 html:

据我所知,可能有两种可能的原因:

  1. 点击未注册,但这种可能性很小。你可以看看其他的点击方式,比如JavascriptExecutor的点击。

  2. (最有可能)在执行点击之后和加载第 2 页结果之前立即查询查找元素。由于元素从第 1 页可见,它会立即与第 1 页的元素列表一起退出。这样做的理想方法是(使用伪代码,因为我不熟悉 python)

    一个。获取当前页码

    b。获取当前页面的所有IP

    c。单击下一步

    d。检查(当前页 + 1 )页是否已激活(class 'active' 添加到第 2 个)

    e。获取当前页面的所有元素

我是 OP,对于遇到类似问题的任何人 - Next 元素在选择后不再附加到 DOM,这导致 StaleElementReferenceException 在打印 element.is_enabled() 或者点击它时 - 可以找到详细的解决方案 here