python - Python selenium webdriver无法点击Paytm“登录/注册”
问题描述
我正在尝试使用以下方式找到并单击 Paytm“登录/注册”
- Python 3.8.0
- 硒 3.141.0
- Chrome 版本 83.0.4103.97(官方版本)(64 位)
但是,似乎 webdriver 确实找到了该元素,但不知何故它没有点击它。下面的 Python 代码可以正常工作,没有任何错误。还尝试了不同的定位技术(在代码中注释)但没有运气。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
def syncClick(driver, timeout, locatorType, locator):
try:
WebDriverWait(driver, timeout).until(EC.element_to_be_clickable((locatorType, locator))).click()
except TimeoutError as e:
print(e.args)
driver = webdriver.Chrome()
driver.maximize_window()
driver.get('https://paytm.com/')
# syncClick(driver, 10, By.XPATH, '//div[text()="Log In/Sign Up"]')
# syncClick(driver, 10, By.CSS_SELECTOR, '#app > div > div.R-WO > div._3AxU > div._3huM > div._1Vt1 > div')
syncClick(driver, 10, By.CSS_SELECTOR, 'div._3ac-')
time.sleep(10)
driver.close()
解决方案
我认为您需要等到页面完美加载。您的意思的元素首先出现在其他元素之前,因此 javascript 尚未准备好执行。
我试过等到找到Digital Gold
文本后再调用你的syncClick
函数。
driver.get('https://paytm.com/')
WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//span[text()='Digital Gold']")))
...
...
syncClick(driver, 20, By.CSS_SELECTOR, 'div._3ac-')
推荐阅读
- arraylist - 使用 Java 8 流将字符串列表分组到自定义对象中
- python - pandas.core.base.DataError:没有数字类型可以在只有数字的数据框中聚合
- gradle - 如何从 Gradle 启动和终止后台进程?
- dialogflow-es - Dialogflow Messenger 未在 UI 中显示丰富的消息,而完整的正常消息显示的是机器人而不是建议芯片
- javascript - 如何在 JavaScript 中定位具有不同类名的兄弟姐妹
- python - 从烧瓶中得到结果
- php - Webmin/Virtualmin - 处理大文件 - 内部服务器错误
- python - 无法从列表中获取字典值
- node.js - 如何在 Node.js 中存储基于回合的游戏状态
- node.js - 没有 Cypress 仪表板的 Cypress 并行化