我只是想使用 selenium 登录网页,向其发布凭证,然后使用 XPath 获取利润值。我的代码是:
#!/usr/bin/python3
# coding=utf-8
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import requests, time, os, gtts
options = Options()
options.add_argument('--headless') # Runs Chrome in headless mode.
options.add_argument('--no-sandbox') # Bypass OS security model
driver = webdriver.Chrome( chrome_options=options, executable_path='/usr/bin/chromedriver' )
driver.get( 'https://etoro.com/portfolio' )
driver.find_element_by_id('username').send_keys('nikotsaras')
driver.find_element_by_id('password').send_keys('*****')
driver.find_element_by_xpath( '/html/body/ui-layout/div/div/div[1]/login/login-sts/div/div/div/form/div/div[5]/button' ).click()
value = driver.find_element_by_xpath( '/html/body/ui-layout/div/div/footer/et-account-balance/div/div[5]/span[1]' )
print( value )
driver.quit()
问题是用户名和密码被正常输入,并且单击了提交值,但是
value = driver.find_element_by_xpath( '/html/body/ui-layout/div/div/footer/et-account-balance/div/div[5]/span[1]' )
无法获取我想要的元素。我从 Chrome 的 DevTools 中获取了 XPAth,在那里我可以正常检索它,但在我的脚本中却不行。
我如何确保单击按钮后网页“https://etoro.com/portfolio”能够正常加载?因为我感觉它没有
错误是这样的:
Traceback (most recent call last):
File "test.py", line 22, in <module>
value = driver.find_element_by_xpath( '/html/body/ui-layout/div/div/footer/et-account-balance/div/div[5]/span[1]' )
File "/usr/local/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 394, in find_element_by_xpath
return self.find_element(by=By.XPATH, value=xpath)
File "/usr/local/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 978, in find_element
'value': value})['value']
File "/usr/local/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "/usr/local/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"/html/body/ui-layout/div/div/footer/et-account-balance/div/div[5]/span[1]"}
(Session info: headless chrome=84.0.4147.105)
答案1
好吧,我只使用 Java 中的 Selenium,但我会这样做:
- 检查 webdriver wait 以确保驱动程序等待足够长的时间让页面到达。一般来说,在触发任何加载新页面的操作后,我都会明确等待几秒钟 - 只是为了安全起见。
- 如果您不确定是否获得了预期的页面,请使用 xpath 获取元素
/html
并将内部 html 记录到控制台 - 这样您就会知道您所在的页面。 - 或者,在最终元素搜索之前发出打印页面命令 - 图像将显示浏览器中的页面。
上面的第二点也可以通过在连接中插入代理(例如 Burp)来实现,您可以在其中读取每个 http 响应,但这需要做更多的工作。