gpt4 book ai didi

javascript - Selenium Python NoSuchElementException : Message: no such element: Unable to locate element:

转载 作者:行者123 更新时间:2023-11-28 00:41:45 26 4
gpt4 key购买 nike

背景:

所以我的编码知识很少,我曾多次尝试通过指南和 youtube 教程学习编码,但从未在我的学习中走得很远。这一次,我正在尝试一种不同的方法,即简单地有一个想法并付诸实践。

我正在尝试使程序与网站交互 fitbit .非常简单,它需要登录并更改我的帐户的电子邮件。

我已成功使用 Selenium python 登录并访问设置页面,但我无法与除此之外的任何元素进行交互。

程序进入设置页面后,需要单击“更改电子邮件地址”

然后填写表格并点击提交。这就是我需要程序做的所有事情。

我的代码:

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


chromedriver = webdriver.Chrome(executable_path=r'C:/Utility/BrowserDrivers/chromedriver.exe')
browser = chromedriver


browser.get('https://www.fitbit.com/settings/profile')
browser.implicitly_wait(20)
username = browser.find_element_by_xpath('//*[@id="loginForm"]/fieldset/dl/dd[1]/input')
username.click()
username.send_keys('Email')
password = browser.find_element_by_xpath('//*[@id="loginForm"]/fieldset/dl/dd[2]/input')
password.click()
password.send_keys('Password')

browser.find_element_by_xpath('//*[@id="loginForm"]/div[1]/button').click()
browser.implicitly_wait(30)
#browser.find_element_by_xpath('//*[@id="ember798"]/div[3]/div[2]/button').click()
new_email = browser.find_element_by_xpath('//*[@id="ember1077"]')
new_email.click()
new_email.send_keys('New Email')
confirm_new_email = browser.find_element_by_xpath('//*[@id="ember1107"]')
confirm_new_email.click()
confirm_new_email.send_keys('New Email')
password = browser.find_element_by_xpath('//*[@id="ember1119"]')
password.click()
password.send_keys('Password')
#browser.find_element_by_css_selector('#ember832 > div:nth-child(4) > div.column.medium-5.change-email-button-container > button').click()
#browser.find_element_by_xpath('//*[@id="ember748"]/div[3]/div[2]').click()

我的错误:

DevTools listening on ws://127.0.0.1:51658/devtools/browser/12ae1773-a1f7-473f-8128-32f2090202fc
[12820:7500:1215/095935.812:ERROR:shader_disk_cache.cc(257)] Failed to create shader cache entry: -2
[12820:7500:1215/095959.060:ERROR:shader_disk_cache.cc(257)] Failed to create shader cache entry: -2
Traceback (most recent call last):
File "looptest.py", line 25, in <module>
new_email = browser.find_element_by_xpath('//*[@id="ember1077"]')
File "C:\Python36\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 394, in find_element_
by_xpath
return self.find_element(by=By.XPATH, value=xpath)
File "C:\Python36\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 978, in find_element
'value': value})['value']

File "C:\Python36\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "C:\Python36\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_resp
onse
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"
method":"xpath","selector":"//*[@id="ember1077"]"}
(Session info: chrome=70.0.3538.110)
(Driver info: chromedriver=2.45.615291 (ec3682e3c9061c10f26ea9e5cdcf3c53f3f74387),platform=Windows NT 1
0.0.17134 x86_64)

我明白代码很乱,我计划在程序真正运行后整理一下并添加 if 语句、try 和其他所有内容。

解决方案:

  1. 我尝试让浏览器等待元素加载。

  2. 我试过摆弄 iframe 命令,我不相信第一个按钮在不同的 iframe 上,但第二部分可能。

  3. 我尝试过使用 xpath,也尝试过使用 CSS 选择器命令。

HTML:

IMAGE OF SETTINGS PAGE

上面是设置页面的图片,我要点击红圈里的按钮

这是 xpath://*[@id="ember815"]/div[3]/div[2]/button

sol 元素 100% 存在。

HTML OF BUTTON

有一个检查元素的截图。

CHANGE EMAIL FIELDS

单击按钮后,将出现此框,然后我需要填写这些字段。

THE HTML OF THE NEW EMAIL FIELD

如有任何帮助,我们将不胜感激。我知道此页面上有很多 Javascript,我认为这是我的问题。 Javascript 使我无法与这些元素交互,但我不确定为什么。

更新 1.0

一位用户建议我截图所有我不确定使用命令的部分

browser.save_screenshot('error2.png')

有趣的是,提供的屏幕截图是空白的。 SEE IMAGE

更新 2.0

感谢您目前的回复,我已经实现了建议。

我实现了这行代码

browser.find_element_by_xpath('//button[@class="button change-email-button"]').click()

它已经推进了程序,所以它把我带到了这个阶段。

Here

现在我在填写表格时遇到了同样的问题。

Traceback (most recent call last):
File "looptest.py", line 28, in <module>
new_email = browser.find_element_by_xpath('(//input[@data-test-qa="new-email"])[2]')
File "C:\Python36\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 394, in find_element_
by_xpath
return self.find_element(by=By.XPATH, value=xpath)
File "C:\Python36\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 978, in find_element

'value': value})['value']
File "C:\Python36\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "C:\Python36\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_resp
onse
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"
method":"xpath","selector":"(//input[@data-test-qa="new-email"])[2]"}
(Session info: chrome=70.0.3538.110)
(Driver info: chromedriver=2.45.615291 (ec3682e3c9061c10f26ea9e5cdcf3c53f3f74387),platform=Windows NT 1
0.0.17134 x86_64)

我已经添加了等待和其他东西,但仍然没有运气

browser.find_element_by_xpath('//button[@class="button change-email-button"]').click()
browser.implicitly_wait(30)
#new_email = browser.find_element_by_xpath('//*[@id="ember1077"]')
new_email = browser.find_element_by_xpath('(//input[@data-test-qa="new-email"])[2]')

最佳答案

ID 似乎是动态的尝试使用以下 Xpath

# Change Email Address button
//button[@class="button change-email-button"]

# email
(//input[@data-test-qa="new-email"])[2]

# confirm email
(//input[@data-test-qa="confirm-new-email"])[2]

# password
(//input[@data-test-qa="password-for-email-change"])[2]

破解 Change Email 按钮后,您需要等到表单弹出窗口出现

关于javascript - Selenium Python NoSuchElementException : Message: no such element: Unable to locate element:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53794397/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com