当前位置: 首页 > 知识库问答 >
问题:

无法通过id、名称或链接文本或WebDriverWait()在selenium中找到元素。不是每次都抛出这样的错误异常

钮誉
2023-03-14
<a name="DERIVED_SSS_SCL_SSS_ENRL_CART$276$" id="DERIVED_SSS_SCL_SSS_ENRL_CART$276$" ptlinktgt="pt_peoplecode" tabindex="126" href="javascript:submitAction_win0(document.win0,'DERIVED_SSS_SCL_SSS_ENRL_CART$276$');" class="SSSHYPERLINKBOLDSMALL">Enrollment Shopping Cart</a>

是我要找的元素。

背景:我正在尝试自动化班级注册。问题中的页面必须通过某些安全措施访问,并且肯定不是典型的web页面。

首先,我试了一下:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
username = input("Username: ")
password = input("Password: ")

username_box = driver.find_element_by_name("j_username")
username_box.send_keys(username)

password_box = driver.find_element_by_name("j_password")
password_box.send_keys(password)
password_box.send_keys(Keys.RETURN) # Now, we are at the page in question after signing on.

我试过这个:

to_shopping_cart = driver.find_element_by_link_text("Enrollment Shopping Cart")

使用find_element_by_link_text、find_element_by_partial_link_text、find_element_by_id、find_element_by_name以及此处文档(https://selenium-python.readthedocs.org/api.html#selenium.webdriver.remote.webdriver.webdriver.find_element_by_link_text)中列出的一些其他选项。这些都抛出了“没有这样的元素”。

接下来,我尝试使用WebDriverWait。这不断抛出“超时异常”。

目前的理论:

1它与受保护的登录有关。这是一个非常奇怪的网站,一点也不直观,一吨吨的元素在彼此之间。

2它与它周围的其他元素有关。如果需要的话,我一定会上传这些,这只是一个巨大的html块,所以我想让问题尽可能的简洁。

3我想过使用driver.get()和href操作,但这只是重新加载web页面。所以那也不管用。

通过切换到正确的iFrame,使用:

proper_frame_element = driver.find_element_by_name('TargetContent')
driver.switch_to_frame(proper_frame_element)

共有2个答案

凌钊
2023-03-14

您是否尝试过通过元素的XPath捕获这些元素?Xpath对我来说似乎通常工作得很好。

为了方便地找到xpath而不是自己输入它,您可以通过Chrome访问网站,右键单击您想要xpath的元素,选择inspect element,就会弹出页面html的侧边栏。
在侧边栏中,应该有一条用灰色突出显示的线。这是html中指向element的行,如果您将鼠标放在该行上,您应该会看到您的element被高亮显示。右键单击该行并选择copy xpath,您就应该拥有您的xpath了。在代码中输入以下内容:

driver.find_element_by_xpath("xpath_of_element_you_want").sendkeys("your_username")

请确保xpath包含引号(字符串),并且要发送的用户名和密码键也是字符串。

黎奇略
2023-03-14

根据注释中给出的信息,所需的元素在iframe中。这意味着您需要在进行搜索之前切换到iframe:

driver.switch_to.frame("frame name or id")
to_shopping_cart = driver.find_element_by_link_text("Enrollment Shopping Cart")

然后,如果需要切换到默认内容,请使用:

driver.switch_to.default_content()
 类似资料:
  • 问题内容: 我使用上面的python代码来练习一些基本的Selenium操作。我找不到任何元素,无论是名称还是ID。不管我尝试什么,我总是会遇到相同的错误,这表明我要查找的元素不存在。(想法是按一下其中一个按钮…) 这是网站html代码的一部分: 这是所说的网站(链接断开) 任何帮助将不胜感激。 顺便说一句,这是我尝试运行的第一个使用Selenium的程序,是否有可能需要更改某些设置或需要安装其他

  • 问题内容: 我正在尝试选择一个包含锚点的元素,但文本被埋在div内的一个段落中。这是我正在使用的HTML: 我用来尝试捕获的代码针对的是“ Smoke Sequential”文本,其内容为: 变量“服务”中包含“烟雾顺序”的位置。运行它时,出现以下错误: 任何帮助将不胜感激。 问题答案: 问题可能出在html的其余部分,您没有发布的部分。 在此示例中(我刚刚关闭了打开的标签): 我可以轻松找到该元

  • 我试图自动登录到网站https://opensource-demo.orangehrmlive.com/web/index.php/auth/login使用硒通过它给出了一个错误 selenium.common.exceptions.NoSuchElementException: 消息: no suchElement: 无法找到元素: {“method”:“css selector”,“selec

  • 问题内容: 我正在使用Selenium WebDriver,并编写了一个小的代码来查找和元素(即按钮)并单击它。这是按钮的HTML代码: 这是测试用例的C#代码: 我也尝试使用XPath: 我找到了一个解决方案,说您一定没有实现“等待”。页面不等待完全加载并尝试查找元素。因此,我添加了等待命令,但没有发生任何有用的事情。仍然出现相同的错误: 问题答案: 由于您的元素位于IFrame中,因此您需要使

  • 问题内容: 我正在尝试通过angularjs在html中查找元素。 这是html: 我试图通过类名多文件来获取按钮元素,然后我尝试 但是它不起作用,并且尝试过,但仅对标签起作用。 在angularjs中,有没有可以通过ID或类名获取元素的函数? 问题答案: 是DOM文档上的函数。它既不是jQuery也不是jqLit​​e函数。 使用时不要在类名前添加句号: 将其包装在jqLit​​e中(如果在An

  • 我使用selenium IDE 1.9.0记录测试。请告诉我什么地方没有错,以及如何解决问题。 以下是我记录测试的步骤。1.我使用用户名和密码登录网站。2.我导航到搜索成员页面,输入成员的姓名,单击名称链接。系统将引导我进入成员配置文件页面。 脚本停在这一行: 我第一次玩脚本时,它运行没有任何错误。在运行该脚本8小时后,它提示我以下错误: 我使用调试函数来查看出了什么问题。以下是调试窗格中显示的消