无法在 Python3 中使用 Selenium 从网页检索值

无法在 Python3 中使用 Selenium 从网页检索值

我只是想使用 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 响应,但这需要做更多的工作。

相关内容