NoSuchElementException:没有这样的元素:无法找到元素

问题描述 投票:0回答:4

免责声明:十多年后我又重新开始编写脚本,因此对于这样一个基本问题提前表示歉意,但非常需要和感谢帮助。

我最近尝试寻找脚本来自动化我的求职,为此,我找到了一个脚本,可以帮助我登录求职门户并申请符合我条件的职位。

但我相信脚本没有更新,因为我在运行它时遇到错误:

NoSuchElementException:没有这样的元素:无法找到元素: {"method":"xpath","selector":"//*[@id="root"]/div[2]/div[2]/div/form/div[2]/input"} (会话信息:chrome=98.0.4758.109)

我相信这与以下代码行有关:

driver.get("https://www.naukri.com")
driver.find_element_by_xpath('//*[@id="login_Layer"]/div').click()
time.sleep(5)
driver.find_element_by_xpath('//*[@id="root"]/div[2]/div[2]/div/form/div[2]/input').send_keys("YOUR NAUKRI LOGIN ID")
driver.find_element_by_xpath('//*[@id="root"]/div[2]/div[2]/div/form/div[3]/input').send_keys("YOUR NAUKRI PASSWORD")
time.sleep(5)
driver.find_element_by_xpath('//*[@id="root"]/div[2]/div[2]/div/form/div[6]/button').click()

该脚本能够访问 Naukri.com(工作门户)并找到 login_Layer ID 的路径,这将打开登录侧边栏。但随后它无法找到用户名和密码字段。可能是因为网页变了。

我正在尝试检查页面元素并找到正确的 xpath,但没有运气。再说一次,我已经有十多年没有接触过 XML/HTML 或任何类型的 Web 开发了(而且一开始就是个新手),所以发现这很难。

任何指导或帮助将不胜感激。

期待您的答复。

提前致谢!

python html xml selenium xpath
4个回答
1
投票

是的,你的 XPath 已经过时了。

如果您使用的是 chromium 浏览器,请右键单击您想要 XPath 的元素,然后单击“检查”。如果您的 DevTools 尚未打开,请执行此操作两次。然后它将突出显示页面源中的元素。之后,右键单击突出显示的元素,复制,然后“复制 XPath”以更新您的脚本。

driver.find_element_by_xpath('//*[@id="root"]/div[2]/div[2]/div/form/div[2]/input').send_keys("YOUR NAUKRI LOGIN ID")

此语法应该仍然有效,但现代指南希望您使用此语法:

from selenium.webdriver.common.by import By

driver.find_element(By.XPATH, '//*[@id="root"]/div[3]/div[2]/div/form/div[2]/input').send_keys("YOUR NAUKRI LOGIN ID")

0
投票
wait=WebDriverWait(driver,20)
driver.get("https://www.naukri.com")

wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,'#login_Layer > div'))).click()
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,'form > div:nth-child(2) > input'))).send_keys("user")
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,'form > div:nth-child(3) > input'))).send_keys("pw")
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,'button.btn-primary.loginButton'))).click()

您想要使用 webdriver 等待并切换您的 xpath。

进口:

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

0
投票

您的 XPATH 实际上不正确。

我建议您尽可能编写最具弹性的 XPath,因为 XPath 越长,它就会变得越脆弱。让 XPath 基于大型 HTML 标签层次结构通常不是一个好主意,因为如果中间引入了新标签(新的 div 标签),它就会中断。我相信这个应用程序也发生了什么。

为了避免这种情况,您可以使用下面的 xpath。

driver.find_element_by_xpath("//label[text()='Email ID / Username']/../input").send_keys("YOUR NAUKRI LOGIN ID")

driver.find_element_by_xpath("//label[text()='Password']/../input").send_keys("YOUR NAUKRI PASSWORD")

0
投票

我 ulpoaded 一个 chrome 扩展来生成 xpath、css 选择器和其他定位器,但它仍然给我错误的结果,有什么方法可以解决这个问题

© www.soinside.com 2019 - 2024. All rights reserved.