Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >is_enabled每次在Python循环中返回true

is_enabled每次在Python循环中返回true
EN

Stack Overflow用户
提问于 2021-07-30 04:36:08
回答 3查看 389关注 0票数 0

下面有搜索元素的代码。如果找不到该元素,请单击下一页。我想要的是,如果元素直到最后一页才被找到,它应该打印“元素未找到”。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
elpath=f"//span[contains(text(),[value})]"
while True:
    time sleep(2)
    try:
        driver.find element_by_xpath(elpath).click()
        break
    except Exception:
        if driver.find element_by_xpath("Xpath to click Next Page").is_enabled():
            driver.find_element_by_xpath("Xpath to click Next Page").click()
        else:
            print("Element Not Found")
            break

但是,当我选中driver.find element_by_xpath("Xpath to click Next Page").is_enabled()时,即使禁用next按钮(即列表的最后一页),也会返回True

下一个按钮的HTML代码如下:

用于禁用按钮的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<button mat-icon-button="" type="button" class="mat-focus-indicator mat-tooltip-trigger mat-paginator-navigation-next mat-icon-button mat-button-base_mat-animation-noopable mat-button-disabled" aria-label="Next page" disabled="true">
<span class="mat-button-wrapper">
<svg viewBox="0 0 24 24" focusable="false" class="mat-paginator-icon"> <path d="M08 6G8.59 8.32 13.23 121-821 4L10 142-6b">
</Path>
</svg>
</span>
<span matripple="" class="mat-ripple mat-button-ripple mat-button-ripple-round"> </span><span class="mat-button-focus-overlay">
</span>
</button>

用于普通按钮

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<button mat-icon-button="" type="button" class="mat-focus-indicator mat-tooltip-trigger mat-paginator-navigation-next mat-icon-button mat-button-base_mat-animation-noopable" aria-label="Next page"> 
<span class="mat-button-wrapper">
<svg viewBox="0 0 24 24" focusable="false" class="mat-paginator-icon"> <path d="M08 6G8.59 8.32 13.23 121-821 4L10 142-6b">
</Path>
</svg>
</span>
<span matripple="" class="mat-ripple mat-button-ripple mat-button-ripple-round">
</span>
<span class="mat-button-focus-overlay">
</span>
</button>

有人能建议另一种方法吗?

提前谢谢!

EN

回答 3

Stack Overflow用户

发布于 2021-07-30 05:42:41

我猜你的问题是压痕。看起来time sleep(2)不像内部try-except块具有相同的缩进。

这导致单击next page按钮后,下一页仍未加载,因此Selenium实际上是上一页next page元素。

另外,您有一个错误,您缺少了_ --应该是find_element_by_xpath

同时,在elpath=f"//span[contains(text(),[value})]"中输入错误,而它应该是elpath=f"//span[contains(text(),{value})]"

所以,请试试这个:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
elpath=f"//span[contains(text(),{value})]"
while True:
    time sleep(2)
    try:
        driver.find_element_by_xpath(elpath).click()
        break
    except Exception:
        if driver.find_element_by_xpath("Xpath to click Next Page").is_enabled():
            driver.find_element_by_xpath("Xpath to click Next Page").click()
        else:
            print("Element Not Found")
            break
票数 1
EN

Stack Overflow用户

发布于 2021-07-30 05:05:17

尝试下面的代码一次。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
try:
    driver.find element_by_xpath(elpath).click()
    break
except Exception:
    if driver.find element_by_xpath("Xpath to click Next Page").get_attribute('disabled') == None:
        driver.find_element_by_xpath("Xpath").click()
    elif driver.find element_by_xpath("Xpath").get_attribute('disabled') == "true":
        print("Element Not Found")
        break
票数 0
EN

Stack Overflow用户

发布于 2021-07-30 13:27:00

我假设你遇到了时间问题。我认为避免这种情况的最好方法是在尝试单击或检查启用之前确保页面已经更改。在Selenium术语中,当页面或页面的一部分通过导航到新页面或刷新页面的一部分等方式发生更改时,元素引用已经“陈旧”了。我们可以通过使用WebDriverWait和等待staleness_of来检测这一点。

我还将定位器分解到代码块的顶部,因为这样可以使代码更易于阅读,而且如果发生变化,定位器也更容易管理。

请参阅下面我对您代码的更新。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

ele_locator=(By.XPATH, "//span[contains(text(),[value])]")
next_page_locator = (By.XPATH, "next page XPath")
wait = new WebDriverWait(driver, 10)

while True:
    try:
        driver.find_element(ele_locator).click()
        break
    except Exception:
        next_page = driver.find_element(next_page_locator)
        if next_page.is_enabled():
            next_page.click()
            wait.until(EC.staleness_of(ele))
        else:
            print("Element Not Found")
            break

注意:如果您使用的是隐式等待,则需要关闭它们。在文档中明确警告混合隐式和显式等待(WebDriverWait)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68591073

复制
相关文章
Linux下Unicorn服务器配置
Unicorn 是什么? 1. 为 Rack 应用程序设计的 HTTP server 2. 是一个利用Unix的高级特性开发的 3. 为具备低延迟,高带宽的连接的客户服务
星哥玩云
2022/06/29
10.1K0
unicorn 记录
unicorn官网:https://www.unicorn-engine.org/
tea9
2022/09/08
5840
unicorn 记录
如何在Ubuntu 14.04上使用Unicorn和Nginx部署Rails应用程序
当您准备部署Ruby on Rails应用程序时,需要考虑许多有效的设置。本教程将帮助您部署Ruby 在 Rails应用程序中的生产环境,使用PostgreSQL作为数据库,在Ubuntu 14.04上使用Unicorn和Nginx。
丰一川
2018/09/28
4.3K0
TW洞见〡Ruby Web服务器:这十五年
文章作者来自:ThoughtWorks - 韩翼。 坦率的说,作为一门年轻的计算机语言,Ruby在最近二十年里的发展并不算慢。但如果与坐拥豪门的明星语言们相比,Ruby就颇显平民范儿,表现始终不温不火,批评胜于褒奖,下行多过上扬。但总有一些至少曾经自称过Rubyist的程序员们,愉快地实践了这门语言,他们没有丝毫的歧视习惯,总是努力尝试各家之长,以语言表达思想,用基准评判高下,一不小心就影响了整个技术发展的进程。 本文谨以Ruby Web服务器技术的发展为线索,回顾Ruby截至目前最为人所知的Web领域中
ThoughtWorks
2018/04/16
2K0
TW洞见〡Ruby Web服务器:这十五年
图解 Unicorn 工作原理
我很早之前,就是通过这篇文章搞懂了 Python Web 应用服务器是个什么鬼,虽然本文讲的是 Ruby 的 Web 应用服务器,但原理是通的所以翻出来推荐给大家,下面是正文。
HelloGitHub
2021/05/14
1.3K0
图解 Unicorn 工作原理
或 、与、异或
& 与 (都是1时,结果才为1) 表示按位与。 &表示按位与操作,我们通常使用0x0f来与一个整数进行&运算,来获取该整数的最低4个bit位,例如,0x31 & 0x0f的结果为0x01。 二进制与运算规则:1&1=1  1&0=0  0&0=0 | 或  (只要有1,那么就是1) 表示按位或 按位或运算 按位或运算符“|”是双目运算符。其功能是参与运算的两数各对应的二进位(也就是最后一位)相或。只要对应的二个二进位有一个为1时,结果位就为1。 ^ 异或 (只要一样结果就是0) 按
Lokinli
2023/03/09
9370
Nginx 作为下载服务器
特殊说明: 解决问题的光鲜,藏着磕Bug的痛苦。 万物皆入轮回,谁也躲不掉! 以上文章,均是我实际操作,写出来的笔记资料,不会出现全文盗用别人文章!烦请各位,请勿直接盗用!
收心
2022/01/19
2.2K0
如何在CentOS 6.5上使用Unicorn和Nginx部署Rails应用程序
在部署基于Rails的Web应用程序时,简单设计的应用程序服务器可以在几分钟内启动并运行。但是,如果您希望更好地控制服务器设置或想要尝试更灵活的新功能,那么使用分层的组件可以帮助您实现目标- 无论是面向未来的部署还是需要引入第三方元素,例如缓存服务器。
水门
2018/08/07
4.1K0
Thin-film Bulk Acoustic Wave Technology
海大指南针
2022/05/16
2420
Thin-film Bulk Acoustic Wave Technology
GaAs Thin Wafer的强度提升探究
上几天研究了一下GaAs的抛光,其实化合物半导体的抛光都会面临薄晶圆强度小,晶圆有着天然的解离镜像,容易裂片的问题。
用户2760455
2022/11/15
6550
GaAs Thin Wafer的强度提升探究
Gentoo下Nginx+thin构建rails环境
使用emerage的话,需要在/etc/portage/package.keywords中加入
EltonZheng
2021/01/22
8710
unicorn在安卓中使用
https://github.com/RikkaApps/Riru/releases
tea9
2023/03/08
9430
使用Unicorn和Nginx在Ubuntu 14.04上配置Ruby on Rails应用程序
Ruby on Rails 是一个流行的 Web 应用程序框架,允许开发人员创建动态 Web 应用程序。本指南介绍如何在 Ubuntu 14.04 上使用Unicorn和 nginx 在服务器上部署Rails应用程序。
LPD6375
2018/08/29
7K0
4.7 服务器上的 Git - GitWeb
如果你对项目有读写权限或只读权限,你可能需要建立起一个基于网页的简易查看器。 Git 提供了一个叫做 GitWeb 的 CGI 脚本来做这项工作。
shaonbean
2019/05/26
9550
Kafka 生产与消费
接着上一篇博客,本篇主要介绍Kafka的生产与消费的过程。Producers往Brokers里面的指定Topic中写消息,Consumers从Brokers里面拉去指定Topic的消息。
大鹅
2019/09/17
1.2K0
Kafka 生产与消费
使用 docker 作为 Web 开发服务器
提供一种思路,临时启动一个 nginx 容器作为服务器来开发前端应用,nginx 作为静态页面发布器,并可以代理远端 API。同时,我们也可以在 shell 中操作打开浏览器,并监控文件的改变并刷新浏览器。php,python 等脚本类的 web 开发也可以使用这个方法,只需要更换相应的 server 镜像作为容器运行的基础环境。
谢正伟
2020/06/08
3K0
POWER架构服务器作为计算节点
在power机器上安装计算组件,将power机器作为计算节点,并测试Openstack的基本功能。
后端云
2018/10/25
2K0
Linux 服务器使用git 作为仓库
https://www.cnblogs.com/JayYang/p/16436643.html
全栈测试开发日记
2023/02/02
1.4K0
与(&)、或(|)、异或(^) – 位运算详解
位运算,在平时的使用频率不是很高,大部分人都很少用到,以至于对位运算的理解也是比较模糊。
Yiiven
2022/12/15
1.7K0
与(&)、或(|)、异或(^) – 位运算详解
点击加载更多

相似问题

Rails 3.2.1登录Passenger、Thin或Unicorn

10

为什么此rackup文件适用于Thin,而不适用于WEBrick或Unicorn?

13

Rails在开发模式下为Webrick,在生产模式下为Thin

12

简单的Ruby服务器设置,使用Thin作为简单的rhtml服务器(如Webrick)

18

从WEBrick到Unicorn: Heroku上的Rails

26
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文