我正在尝试使用 selenium 登录网站。这是我编写的代码。
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://abcde.com")
assert "xxx" in driver.title
user = driver.find_element_by_css_selector("#ctl00_MasterHeaderPlaceHolder_ctl00_userNameTextbox")
user.clear()
user.send_keys("username")
pwd = driver.find_element_by_css_selector("#ctl00$MasterHeaderPlaceHolder$ctl00$passwordTextbox")
pwd.clear()
pwd.send_keys("mypassword")
pwd.send_keys(Keys.RETURN)
assert "No results found." not in driver.page_source
driver.close()
当我运行这段代码时,发生了InvalidSelectorException。
raise exception_class(message, screen, stacktrace) selenium.common.exceptions.InvalidSelectorException: Message: invalid selector: An invalid or illegal selector was specified (Session info: chrome=59.0.3071.115) (Driver info: chromedriver=2.30.477691 (6ee44a7247c639c0703f291d320bdf05c1531b57),platform=Linux 4.4.0-83-generic x86_64)
<input name="ctl00$MasterHeaderPlaceHolder$ctl00$userNameTextbox" type="text" value="Username" id="ctl00_MasterHeaderPlaceHolder_ctl00_userNameTextbox" OnClick="UsernameBehaviour("click", "ctl00_MasterHeaderPlaceHolder_ctl00_userNameTextbox", "Username");" OnFocus="UsernameBehaviour("focus", "ctl00_MasterHeaderPlaceHolder_ctl00_userNameTextbox", "Username");" OnBlur="UsernameBehaviour("blur", "ctl00_MasterHeaderPlaceHolder_ctl00_userNameTextbox", "Username");" />
<input name="ctl00$MasterHeaderPlaceHolder$ctl00$passwordTextbox" type="password" id="ctl00_MasterHeaderPlaceHolder_ctl00_passwordTextbox" OnBlur="PasswordBehaviour("ctl00_MasterHeaderPlaceHolder_ctl00_passwordTextbox", "ctl00_MasterHeaderPlaceHolder_ctl00_tempPasswordTextbox", 1);" style="display:none" />
<input name="ctl00$MasterHeaderPlaceHolder$ctl00$tempPasswordTextbox" type="text" value="Password" id="ctl00_MasterHeaderPlaceHolder_ctl00_tempPasswordTextbox" OnClick="PasswordBehaviour("ctl00_MasterHeaderPlaceHolder_ctl00_passwordTextbox", "ctl00_MasterHeaderPlaceHolder_ctl00_tempPasswordTextbox", 2);" OnFocus="PasswordBehaviour("ctl00_MasterHeaderPlaceHolder_ctl00_passwordTextbox", "ctl00_MasterHeaderPlaceHolder_ctl00_tempPasswordTextbox", 2);" />
可以看到,有两个输入框相关的密码。当我点击密码输入标签时,javascript 似乎做了一些事情。但我不确定。
想知道原因和解决方法。
感谢您的宝贵时间。
请帮帮我。
最佳答案
您没有正确使用 CSS 选择器。它需要绑定(bind)一个元素,但您正试图使用属性值进行查找。
为了使其正常工作,您需要将 CSS 选择器更改为此。
解决方案 1.
driver.find_element_by_css_selector("input[id='ctl00_MasterHeaderPlaceHolder_ctl00_tempPasswordTextbox']")
方案二
由于元素具有名称属性,您可以使用“find_element_by_name”。
driver.find_element_by_name("ctl00$MasterHeaderPlaceHolder$ctl00$tempPasswordTextbox")
关于javascript - 在Selenium中,如何在登录网站时处理InvalidSelectorException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44990388/