首页 > 解决方案 > Python selenium webdriver无法点击Paytm“登录/注册”

问题描述

我正在尝试使用以下方式找到并单击 Paytm“登录/注册”

  1. Python 3.8.0
  2. 硒 3.141.0
  3. 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()

标签: pythonseleniumwebdriver

解决方案


我认为您需要等到页面完美加载。您的意思的元素首先出现在其他元素之前,因此 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-')

推荐阅读