Python,Selenium ......无法找到明显存在的元素

时间:2017-05-09 10:14:45

标签: python selenium selenium-webdriver login nosuchelementexception

我正在尝试使用Python(Selenium)从此站点提取数据: https://sin.clarksons.net/

我输入用户名和密码后,无法点击明显的“提交”底部。你们有些人可以帮忙看看为什么吗? TIA。

import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

if __name__ == "__main__":
    try:
        chrome_path = r"C:\Users\xxx\Downloads\chromedriver_win32\chromedriver.exe"
        driver = webdriver.Chrome(chrome_path)
        driver.get("https://www.clarksons.net/")
        driver.maximize_window()
        time.sleep(5)

        login = driver.find_element_by_xpath('//*[@id="menu"]/li[1]/span')
        time.sleep(5)
        login.click()
        time.sleep(5)

        username = driver.find_element_by_xpath('//input[@id="usernameText"]')
        username.clear()
        username.send_keys("abc(at)hotmail.com")

        password = driver.find_element_by_xpath('/html/body/div[6]/div/div/div[2]/form/div[2]/div/input[1]')
        password.clear()
        password.send_keys("xyzabc")

        submit = driver.find_element_by_xpath('/html/body/div[6]/div/div/div[2]/form/div[4]/div/div/button')
        submit.click()
        time.sleep(5)
        print "login"
        driver.quit()
    except Exception as e:
        print e
        driver.quit()

3 个答案:

答案 0 :(得分:1)

尝试使用id替换xpath并使用css选择器登录按钮

    username = driver.find_element_by_id("usernameText")
    username.clear()
    username.send_keys("vivi.sandsten@gard.no")

    password = driver.find_element_by_id("passwordText")
    password.clear()
    password.send_keys("xyzabc")

    #submit = driver.find_element_by_xpath(".//button[@title='Login']")
    submit = driver.find_element_by_css_selector("#home button.btn-
    primary")
    submit.click()

答案 1 :(得分:0)

您可以按标题找到登录按钮:

submit = driver.find_element_by_xpath('//button[contains(@title, "Login")]')
submit.click()

或者你可以找到表格,然后提交(找到基础上的课程):

submit_form = driver.find_element_by_xpath('//form[starts-with(@class, "ng-valid ng-dirty")]')
submit_form .submit()

希望得到这个帮助。

答案 2 :(得分:0)

您使用的xpath是错误的,正确的是

'/html/body/div[6]/div/div/div[2]/form/div[4]/button'

作为旁注,你真的不应该使用绝对xpath,例如你可以使用'//button[@title="Login"]'作为登录按钮。