python - Selenium 按钮单击在 Python 控制台中有效,但在脚本中无效
问题描述
我有以下 Python 代码使用 Selenium 来自动按下按钮:
from selenium import webdriver
import time
def main():
page_url = 'x.htm?'
driver = webdriver.Safari()
driver.get(page_url)
time.sleep(2)
elem = driver.find_element_by_xpath('yy')
elem.click()
driver.quit()
if __name__ == '__main__':
main()
我已删除 URL 和按钮,但它们是有效的。当我将代码复制到交互式 Python 控制台中时,它会运行并且单击有效;浏览器被重定向。但是当我将代码作为脚本运行时,点击不会发生(浏览器出现并且页面呈现但点击未注册)。
希望有人帮助理解为什么会发生这种情况。
解决方案
正如您所提到的......将代码复制到它运行的交互式 Python 控制台中并且点击工作......这意味着即使有 2 秒的睡眠,该元素也不会变成可点击的。
解决方案
理想情况下,要单击需要诱导WebDriverWait的元素element_to_be_clickable()
,您可以使用以下基于xpath的Locator Strategy:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "yy"))).click()
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
推荐阅读
- c++ - 在 C++ 中重新实现 dos2unix 和 unix2dos;'\r' 和 '\n' 没有出现在 hexdump 中?
- python - tf.keras 和 tf.python.keras 有什么区别?
- mysql - “您的 SQL 语法有错误;请查看与您的 MariaDB 服务器版本相对应的手册以获取正确的语法
- javascript - Next.js 中的动态路由是在服务器端还是客户端呈现?
- libgdx - 如何将搅拌机 2.8 制作的 FBX 转换为 `g3db/g3dj` 文件?
- python-3.x - 有没有办法通过python显示带有数组索引号的输入提示文本?
- java - JVM静态初始化
- javascript - Javascript:如果一个元素可显示,则在数组中显示数据
- python - Flask App:无法为端点“post_to_db”构建 url
- python - 使用 Vue.js 和 Python Flask 下载文件