首页 > 解决方案 > Selenium/Python:无法使用任何 find_element_by_* 方法找到元素

问题描述

我面临一个奇怪的挑战——可能与我对 html 的理解不足有关。

我需要从网站中提取一些数据。但是我不知何故无法通过登录步骤 - 尽管过去曾在其他几个此类应用程序中使用过类似的代码。我只是无法使用任何 get_element_by_*() 方法找到用户名或密码元素。在过去的 24 小时里,我一直在尝试各种事物并研究事物。我确信我在这里做的事情根本上是错误的——但不知道是什么。我有非常相似的代码,可以毫无问题地登录到不同的网站( http://courtbooking.bayclubs.com )。

帮助!我正在复制粘贴我的代码的相关部分

url = "https://www.ussquash.com/serve/?program=login"
inp_username = "my-username"
inp_password = "my-password"
try:
    options = webdriver.ChromeOptions()
    options.add_argument('headless')
    driver = webdriver.Chrome(chrome_options=options)
except:
    print("No web driver")
    exit()

try:
    driver.get(url)
except:
    print("Could not load URL")
    exit()

time.sleep(wait_time_in_seconds)

try:
    #user = driver.find_element_by_id("login")
    user = driver.find_element_by_name("username")
except Exception as e:
    print("No username element, error {}".format(e))
    exit()
else:
    print("Username element found")

try:
    password = driver.find_element_by_id("loginpass")
except Exception as e:
    print("No password element, error {}".format(e))
    exit()
else:
    print("Password element found")

try:
    signon_button = WebDriverWait(driver, wait_time_in_seconds).until(
                            EC.presence_of_element_located((By.CLASS_NAME, "btn btn-primary login-btn")))
except:
    print("No signon element")
    exit()
else:
    print("Signon element found")


print("Logging in with username: %s, password: %s", inp_username, inp_password)
user.clear()
user.send_keys(inp_username)
password.clear()
password.send_keys(inp_password)
signon_button.click()

标签: python-3.xselenium-webdriver

解决方案


该网站正在使用 iFrames 作为登录部分,因此首先您需要切换到 iframe

driver.switch_to_frame(iframe).

然后选择你想要的元素。希望这有助于[链接]


推荐阅读