javascript - 在Selenium中,如何在登录网站时处理InvalidSelectorException

标签 javascript python selenium

我正在尝试使用 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)

为方便起见,我附上了 png 文件。 enter image description here 这是网站中的页面源。

<input name="ctl00$MasterHeaderPlaceHolder$ctl00$userNameTextbox" type="text" value="Username" id="ctl00_MasterHeaderPlaceHolder_ctl00_userNameTextbox" OnClick="UsernameBehaviour(&quot;click&quot;, &quot;ctl00_MasterHeaderPlaceHolder_ctl00_userNameTextbox&quot;, &quot;Username&quot;);" OnFocus="UsernameBehaviour(&quot;focus&quot;, &quot;ctl00_MasterHeaderPlaceHolder_ctl00_userNameTextbox&quot;, &quot;Username&quot;);" OnBlur="UsernameBehaviour(&quot;blur&quot;, &quot;ctl00_MasterHeaderPlaceHolder_ctl00_userNameTextbox&quot;, &quot;Username&quot;);" />            
<input name="ctl00$MasterHeaderPlaceHolder$ctl00$passwordTextbox" type="password" id="ctl00_MasterHeaderPlaceHolder_ctl00_passwordTextbox" OnBlur="PasswordBehaviour(&quot;ctl00_MasterHeaderPlaceHolder_ctl00_passwordTextbox&quot;, &quot;ctl00_MasterHeaderPlaceHolder_ctl00_tempPasswordTextbox&quot;, 1);" style="display:none" />
<input name="ctl00$MasterHeaderPlaceHolder$ctl00$tempPasswordTextbox" type="text" value="Password" id="ctl00_MasterHeaderPlaceHolder_ctl00_tempPasswordTextbox" OnClick="PasswordBehaviour(&quot;ctl00_MasterHeaderPlaceHolder_ctl00_passwordTextbox&quot;, &quot;ctl00_MasterHeaderPlaceHolder_ctl00_tempPasswordTextbox&quot;, 2);" OnFocus="PasswordBehaviour(&quot;ctl00_MasterHeaderPlaceHolder_ctl00_passwordTextbox&quot;, &quot;ctl00_MasterHeaderPlaceHolder_ctl00_tempPasswordTextbox&quot;, 2);" />

为方便起见,我附上了 png 文件。 enter image description here

可以看到,有两个输入框相关的密码。当我点击密码输入标签时,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/

相关文章:

unit-testing - 如何将 Sikuli 脚本集成到 Selenium 中?

python - 让 selenium 在 pythonanywhere 上工作

java - 运行测试时页面对象模型看到空指针异常?

javascript - 切换可见性(从 2 个 DIV 开始;如果 1 个 DIV 可见,则另一个不可见,反之亦然)

python - 如何在二维列表的项目中追加内容?

python - Python + Cairo + GTK/GDK 像素缓冲区的简单设置

python - 每个 PowerShell 调用 Python 脚本并传递 PSObject 并返回解析的数据

javascript - JavaScript 控制台中的 GET 错误是什么?

javascript - Ext.js - 将时间戳格式化为 yyyy-mm-dd hh :mm:ss[. ffffffff]

javascript - 添加和删​​除所选类到父 div