【问题标题】:Web-element is visible and enabled but .click() fails in python selenium with phantomJSWeb 元素可见并已启用,但 .click() 在带有 phantomJS 的 python selenium 中失败
【发布时间】:2018-07-14 22:11:08
【问题描述】:

我想点击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

随后,我从表中获取所有 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:

【问题讨论】:

  • 如果您遇到任何错误,请发布
  • 刚刚更新 - 没有抛出任何异常
  • 那么该元素不可点击。如果有任何隐藏的中途停留,请等待一段时间。或者使用driver.execute_script Js 会为你做的。
  • @PrakashPalnati 如果元素不可点击,为什么上面的代码返回“找到并点击了下一个按钮”

标签: python selenium web-scraping phantomjs screen-scraping


【解决方案1】:

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

  1. 点击未注册,尽管这不太可能发生。你可以看看其他的点击方式,比如 JavascriptExecutor 的点击。

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

    一个。获取当前页码

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

    c。点击下一步

    d。检查 (Current page + 1 ) 页面是否已激活(将“活动”类添加到数字 2)

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

【讨论】:

  • 根据您的建议,我测试了该元素是否已启用,它返回了 StaleElementReferenceException - 我将转到 Prakash Palnati 建议的 driver.execute_script-part
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2016-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-18
    • 2015-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多