Python 尝试使用selenium将登录过程自动化到服务器时出现问题

Python 尝试使用selenium将登录过程自动化到服务器时出现问题,python,python-3.x,selenium,Python,Python 3.x,Selenium,您好,我写这个脚本是为了尝试自动登录eToro服务器,然后获取portfolio服务器的利润和权益值 def get_profit(): profit = equity = '' try: options = webdriver.ChromeOptions() options.add_argument('--headless') # Runs Chrome in headless mode. options.add_argument('--n

您好,我写这个脚本是为了尝试自动登录eToro服务器,然后获取portfolio服务器的利润和权益值

def get_profit():

profit = equity = ''

try:
    options = webdriver.ChromeOptions()
    options.add_argument('--headless')              # Runs Chrome in headless mode.
    options.add_argument('--no-sandbox')            # Bypass OS security model
    options.add_argument('--disable-automation')
    options.add_argument('--disable-extensions')

    # Create new session
    driver = webdriver.Chrome( options=options, executable_path='/usr/bin/chromedriver' )
    driver.get( 'https://etoro.com/portfolio' )

    time.sleep(2)

    driver.find_element_by_id('username').send_keys('my_username')
    driver.find_element_by_id('password').send_keys('my_password')
    driver.find_element_by_css_selector('button.ng-binding').click()

    time.sleep(2)
    driver.save_screenshot( 'static/img/etoro.png' )

    profit = driver.find_element_by_xpath( '/html/body/ui-layout/div/div/footer/et-account-balance/div/div[5]/span[1]' ).text
    equity = driver.find_element_by_xpath( '/html/body/ui-layout/div/div/footer/et-account-balance/div/div[7]/span[1]' ).text
    driver.quit()
except Exception as e:
    profit = repr(e)

return profit, equity
问题是,我不断地收到相同的错误消息,它是NoSuchElementException('没有这样的元素:找不到元素:{“方法”:“xpath”,“选择器”:“/html/body/ui布局/div/div/footer/et账户余额/div/div/div[5]/span[1]”)}\n(会话信息:headless-chrome=86.0.4240.22),无,[''0 0x55a2e8090d99','')

如果尝试在运行我的web应用程序脚本,则可以看到此输出
在几天前,该脚本能够通过每半小时左右成功运行一次来获取这两个值,其余的时间都失败了……但现在我说,它根本无法访问网站,我不知道为什么。

页面正在加载,将错过元素使用等待让元素先加载,然后再抓取它们

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

profit =  WebDriverWait(driver, 20).until(
EC.visibility_of_element_located((By.XPATH, "/html/body/ui-layout/div/div/footer/et-account-balance/div/div[5]/span[1]"))).text

您可能希望查看webdriver等待,因为您的页面未加载,并且很可能无法获取元素。我也尝试了此操作,但没有证明有任何帮助。此外,这是我拍摄的屏幕截图,以查看我尝试获取值时网站处于何种状态。它说发生了一个错误,请再试一次,首先在登录页面中。
profit=WebDriverWait(driver,5)。直到(EC.visibility_of_element_位于((By.CSS_SELECTOR,.ng binding'))驱动程序。通过_id('username')查找_element_。发送_key('myuser')驱动程序。发送_key('mypass')。通过_CSS_选择器查找_element_('button.ng binding')。click()price=WebDriverWait(driver,5)。直到(EC.visibility=WebDriverWait(By.XPATH,/html/body/ui layout/div/div/footer/et account balance/div/div[5]/span[1])。文本
但现在我收到这个错误TimeoutException('',None,None)
price=WebDriverWait(driver,5)。直到((By.CSS_SELECTOR,'button.ng binding'))
这也没用。将超时从5增加。我尝试了20秒和30秒,但仍然得到“timeout Excepetion”,屏幕截图显示发生了错误。不知何故,eToro页面识别了selenium并阻止了它对登录页面的访问……我不知道如何解决这个问题。