【发布时间】:2018-12-15 15:01:01
【问题描述】:
背景:
所以我的编码知识很少,我曾多次尝试通过指南和 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 语句、尝试和其他所有内容。
解决方案:
我已尝试让浏览器等待元素加载。
我试过摆弄 iframe 命令,我不相信第一个按钮在不同的 iframe 上,但第二部分可能。
我尝试过使用 xpath,也尝试过使用 CSS 选择器命令。
HTML:
上面是设置页面的图片,我要点击红圈的按钮
这里是 xpath://*[@id="ember815"]/div[3]/div[2]/button
sol 元素 100% 存在。
有一个元素检查的屏幕截图。
单击按钮后,将出现此框,然后我需要填写这些字段。
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()
它已经推进了程序,所以它把我带到了这个阶段。
现在我在填写表格时遇到了同样的问题。
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]')
【问题讨论】:
-
您应该尝试在您不确定的每个步骤中截屏。
-
我提供的截图不够吗?
-
对不起,我只是建议您如何更好地调试它。我不想回答这个问题。
-
哦,很好!感觉截图已经够多了。但我们会看看其他人是否能够提供帮助!
-
我说的是this,而不是你分享的网站截图。
标签: javascript python html css selenium