大家好!
我正在尝试找到具有动态ID的元素,但是!无论我做什么,除了NoSuchElementException系统地提出......
有我的代码:
try:
driver.get('http://www.website.com/')
usr = driver.find_element_by_css_selector("a[id*='txtEmail']")
pwd = driver.find_element_by_css_selector("a[id*='txtPassword']")
usr.send_keys(username)
pwd.send_keys(password)
driver.find_element_by_css_Selector("a[id*='btnLogin']").click()
if (driver.find_element_by_css_Selector("a[id$=lnkLogOut]")):
log.info("Successfully connected")
else:
log.error("Login failed - Cannot login to the website - Wrong username/password ?")
except NoSuchElementException:
log.error("Cannot find element needed on the login page")
except TimeoutException:
log.error("Cannot reach the website in time")
except:
log.error("Error occurred during the login attempt: {}".format(sys.exc_info()))
有html格式:
<td>Email/Username:</td>
<td><input name="ctl00$cph1$Login1$txtEmail" id="ctl00_cph1_Login1_txtEmail" style="width:160px;" type="text"></td>
<td>Password:</td>
<td><input name="ctl00$cph1$Login1$txtPassword" id="ctl00_cph1_Login1_txtPassword" style="width:160px;" type="password"></td>
<td><input name="ctl00$cph1$Login1$btnLogin" value="Login" id="ctl00_cph1_Login1_btnLogin" class="fancy" with="80px;" style="height:28px;" type="submit"></td>
我输出错误:
DEBUG:selenium.webdriver.remote.remote_connection:POST
http://127.0.0.1:40943/hub/session {"desiredCapabilities": {"platform": "ANY", "browserName": "firefox", "version": "", "marionette": false, "javascriptEnabled": true}}
DEBUG:selenium.webdriver.remote.remote_connection:Finished Request
DEBUG:selenium.webdriver.remote.remote_connection:POST http://127.0.0.1:40943/hub/session/2b64c16e-1582-42ee-8041-66550781c00f/url {"url": "http://www.website.com", "sessionId": "2b64c16e-1582-42ee-8041-66550781c00f"}
DEBUG:selenium.webdriver.remote.remote_connection:Finished Request
DEBUG:selenium.webdriver.remote.remote_connection:POST http://127.0.0.1:40943/hub/session/2b64c16e-1582-42ee-8041-66550781c00f/element {"using": "css selector", "sessionId": "2b64c16e-1582-42ee-8041-66550781c00f", "value": "a[id*='txtEmail']"}
DEBUG:selenium.webdriver.remote.remote_connection:Finished Request
ERROR:__main__:Cannot find element needed on the login page
问题出在哪里?有什么想法吗?
编辑:以下行引发错误:
usr = driver.find_element_by_css_selector("a[id*='txtEmail']")
pwd = driver.find_element_by_css_selector("a[id*='txtPassword']")
答案 0 :(得分:4)
要关注@ {murali关于a
与input
的观点,您可以修复CSS选择器:
usr = driver.find_element_by_css_selector("input[id*=txtEmail]")
pwd = driver.find_element_by_css_selector("input[id*=txtPassword]")
您还可以使用&#34;结尾 - &#34;检查而不是&#34;包含&#34;:
usr = driver.find_element_by_css_selector("input[id$=txtEmail]")
pwd = driver.find_element_by_css_selector("input[id$=txtPassword]")
答案 1 :(得分:2)
根据提供的所有HTML代码标签,用户名,密码和提交按钮都是“输入”,但在代码中使用“a”。所以这就是问题的原因。
根据一个有效的评论
usr = driver.find_elements_by_xpath('//*[contains(@id, "txtEmail")]')
因为此处标签'a'未在xpath中使用而是'*'用于任何标记,因此请在此处输入。
我希望注销按钮也有标签'input',因为没有提供注销元素的HTML代码。所以请检查并创建正确的css或xpath,以便解决超时异常。
谢谢你, 穆拉利