首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何登录到Fidelity网站并在其中导航?

如何登录到Fidelity网站并在其中导航?
EN

Stack Overflow用户
提问于 2018-09-05 23:28:01
回答 3查看 1K关注 0票数 0

我想得到一些帮助登录到富达网站,并在其中导航。到目前为止,我的尝试并没有把我带到任何有意义的地方。这是我写的代码,在与网络上的答案进行了大量的协商之后。这些步骤是:

  1. 登录到Fidelity
  2. 检查响应代码是否不是200,而是302或303,我的代码通过了这个测试(代码302)。
  3. 然后,我检查返回的cookie的数量(有5),对于每个cookie,我尝试导航到Fidelity中的不同的网页(我对每个cookie执行了五次,一次,因为我不知道变量"cookie“的哪个下标"j”可以工作)。

代码语言:javascript
运行
复制
function loginToFidelity(){
  var url = "https://www.fidelity.com"; 
  var payload = {
    "username":"*********", 
    "password":"*********" 
  }; 
  var opt = {
    "payload":payload,"method":"post","followRedirects" : false
  };
  var response = UrlFetchApp.fetch(encodeURI(url),opt);
  if ( response.getResponseCode() == 200 ) { 
    Logger.log("Couldn't login.");
    return
  } 
  else if (response.getResponseCode() == 303 || response.getResponseCode() == 302) {
    Logger.log("Logged in successfully. " + response.getResponseCode());
    var cookie = response.getAllHeaders()['Set-Cookie']
    for (j = 0; j < cookie.length; j++) {
      var downloadPage = UrlFetchApp.fetch("https://oltx.fidelity.com/ftgw/fbc/oftop/portfolio#activity", 
          {"Cookie" : cookie[j],"method" : "post","followRedirects" : false,"payload":payload});
      Logger.log(downloadPage.getResponseCode())
      Logger.log(downloadPage.getContentText())
    }
  }
}

对于下标"j“的每一个选项,对于ResponseCode (总是302),我得到相同的答案,对于ContentText,也得到相同的答案。ContentText的答案显然是不正确的,因为它不是应该的。ContentText如下所示:

代码语言:javascript
运行
复制
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>302 Found</title>
</head><body>
<h1>Found</h1>
<p>The document has moved <a href="https://login.fidelity.com/ftgw/Fidelity/RtlCust/Login/Init?AuthRedUrl=https://oltx.fidelity.com/ftgw/fbc/oftop/portfolio">here</a>.</p>
</body></html>

基于此,我有两个问题:

  1. 我是否正确登录了Fidelity网站?如果没有,为什么在登录过程中得到302的响应代码?为了正确登录,我需要做什么不同的操作?
  2. 为什么我得到了一个奇怪的,显然不正确的答案,我的ContentText,而得到一个完全合理的ResponseCode 302?我需要做什么不同的,以便我可以得到密码控制的页内富达,谁的网址是"https://oltx.fidelity.com/ftgw/fbc/oftop/portfolio#activity"?

注:除上述测试外,还进行了其他一些测试。下面的讨论提供了这些测试的结果。

EN

回答 3

Stack Overflow用户

发布于 2019-10-12 00:25:31

这是对我有用的东西。你可能已经找到解决办法了,不确定。记得填写你的活字号在XXXX的位置和YYYY的引号。

我知道这是python代码,不是google脚本,但是您了解了代码流的概念。

代码语言:javascript
运行
复制
import requests, sys, lxml.html
s = requests.Session()
r = s.get('https://login.fidelity.com')
payload = {

'DEVICE_PRINT' : 'version%3D3.5.2_2%26pm_fpua%3Dmozilla%2F5.0+(x11%3B+linux+x86_64%3B+rv%3A41.0)+gecko%2F20100101+firefox%2F41.0%7C5.0+(X11)%7CLinux+x86_64',
    'SavedIdInd' : 'N',
    'SSN' : 'XXXXX',
    'PIN' : 'YYYYY'
}

r = s.post(login_url, data=payload, headers=dict(referer='https://login.fidelity.com'))
response = s.get('https://oltx.fidelity.com/ftgw/fbc/oftop/portfolio')

print response.content
票数 0
EN

Stack Overflow用户

发布于 2019-10-14 16:47:30

mwahal,您忽略了关键表单操作url (您的login_url未定义)

这很有效(如果添加到您的python代码中)

代码语言:javascript
运行
复制
login_url = 'https://login.fidelity.com/ftgw/Fas/Fidelity/RtlCust/Login/Response/dj.chf.ra'

顺便说一下,这是显示成功登录的帖子后打印的结果

代码语言:javascript
运行
复制
{"status": 
    {
        "result": "success", 
        "nextStep": "Finish", 
        "context":  "RtlCust"
    }   
} 

或者添加一些代码:

代码语言:javascript
运行
复制
if r.status_code == requests.codes.ok:
    status = r.json().get('status')
    print(status["result"])

给你“成功”

票数 0
EN

Stack Overflow用户

发布于 2020-06-06 14:30:54

不幸的是,来自@mwahal的答案已经不起作用了--我一直在试图找出原因,如果我想要更新,就会更新。一个问题是,登录页面现在需要来自cfa.fidelity.com域的cookie,只有在加载一个链接的JavaScript文件时才会设置cookie。

另一种选择是使用selenium,如果您只想浏览站点,或者如果您想要访问富达的内部API,则使用seleniumrequests

事务API的seleniumreqeusts有问题.API需要内容类型:application/jsonseleniumrequests似乎不支持请求中的自定义头。因此,我使用selenium登录,调用不需要该头的API之一,复制然后编辑响应的请求头,并使用常规请求获取事务:

代码语言:javascript
运行
复制
from seleniumrequests import Chrome
import requests

# Log into Fidelity
driver = Chrome()
driver.get("https://www.fidelity.com")
driver.find_element_by_id("userId-input").send_keys(username)
driver.find_element_by_name("PIN").send_keys(password)
driver.find_element_by_id("fs-login-button").click()

r = driver.request('GET', 'https://digital.fidelity.com/ftgw/digital/rsc/api/profile-data')
headers = r.request.headers
headers['accept'] = "application/json, text/plain, */*"
headers['content-type'] = "application/json"

payload = '{"acctDetails":[{"acctNum":"<AcctId>"}],"searchCriteriaDetail":{"txnFromDate":1583639342,"txnToDate":1591411742}}'
api = "https://digital.fidelity.com/ftgw/digital/dc-history/api"
r = requests.post(api, headers=headers, data=payload)

transactions = r.json()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52194600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档