无法抓取发现银行页面
Can't scrape Discover bank page
我环顾四周并尝试了很多不同的东西,但似乎找不到关于这个主题的任何信息。
我正在尝试从我的银行 (Discover) 中抓取信息并为此编写了一个脚本。它 returns 一切正常,但返回的是“已注销”页面,而不是带有我的余额的所需主页。
我的乱码如下:
import requests
from bs4 import BeautifulSoup as bs
def scrapeDiscover():
URL = 'https://portal.discover.com/customersvcs/universalLogin/signin'
request_URL = 'https://portal.discover.com/customersvcs/universalLogin/signin'
HEADERS = {'User-Agent':'User-Agent: Mozilla/5.0 (Windows NT; Windows NT 6.2; en-US) WindowsPowerShell/4.0', 'Origin':'https://portal.discover.com', 'Referer':'https://portal.discover.com/customersvcs/universalLogin/ac_main'}
s = requests.session()
PAYLOAD = {
'userID' : 'username',
'password' : 'password',
'choose-card' : 'Credit Card',
'pm_fp' : 'version=-1&pm_fpua=mozilla/5.0 (x11; linux x86_64) applewebkit/537.36 (khtml, like gecko) chrome/95.0.4638.69 safari/537.36|5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36|Linux x86_64&pm_fpsc=24|1920|1080|1053&pm_fpsw=&pm_fptz=-6&pm_fpln=lang=en-US|syslang=|userlang=&pm_fpjv=0&pm_fpco=1',
'currentFormId' : 'login',
'userTypeCode' : 'C',
'rememberOption' : 'on',
}
login_req = s.post(URL, headers=HEADERS, data=PAYLOAD)
cookies = login_req.cookies
soup = bs(s.get('https://card.discover.com/cardmembersvcs/achome/homepage').text, 'html.parser')
balance = soup.text
print(balance)
scrapeDiscover()
我还查看了所需的 post 请求信息,并将其放在此处:
如有任何帮助或建议,我们将不胜感激!即使只是一个建议也会有很大帮助。非常感谢大家!如果需要更多信息,请告诉我。
编辑:添加信息
我想 post 请求中可能缺少一些 cookie 或令牌,但我已经多次检查代码并找到任何在 implimented 时有效的东西,或者即使我正确地实现它也是如此。
一些让我印象深刻的事情:
SSID:在 post 请求的 'Form Data' 中,有一个带有长字符串的 'ssid' 形式。然而,这每次都会改变,我想象它代表 'session ID' 而我不需要它,因为我的代码正在创建一个新的 session.
ssid: 0433c923-6f48-4832-8d6d-b26c5b0e6d4-1637097180562
STRONGAUTHSVS:我发现的另一件事是这个“STRONGAUTHSVS”变量(嵌套在一长串 cookie 中,既在请求中又在接收中 headers)
STRONGAUTHSVCS=SASID=null&SATID=b081-
sectoken:最后看到work token,觉得应该就是这个了。 Cookie 中的一个变量,变量名是 'sectoken'。不知道它是什么,也不知道我会如何实现它。
sectoken=hJNQgh7EOnH1xx1skqQqftbV/kE=
对于所有这些,我已经尽力将它们嵌入到我的代码中的 headers 中,但它似乎对输出没有影响。
我附上了网站 cookie 的 pastebin 和捕获的表单数据(减去任何敏感数据)。如果有人有任何想法,我将非常感激!
https://pastebin.com/PNnV6Mpw
阅读this。我认为,出于安全原因,您的 POST 请求可能需要一个令牌。如果只是抓取很重要,请尝试使用硒。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Firefox()
driver.get("https://portal.discover.com/customersvcs/universalLogin/signin")
driver.maximize_window()
log_in = (
WebDriverWait(driver, 5)
.until(
EC.element_to_be_clickable(
(By.XPATH, "/html/body/div[1]/header/div[1]/div[2]/div[2]/ul/li[3]/a")
)
)
.click()
)
driver.find_element_by_xpath("//*[@id='userid']").send_keys("your_user_id")
driver.find_element_by_xpath("//*[@id='password']").send_keys("your_password")
driver.find_element_by_xpath("//*[@id='log-in-button']").click()
当我使用左侧面板登录时出现错误。
我环顾四周并尝试了很多不同的东西,但似乎找不到关于这个主题的任何信息。
我正在尝试从我的银行 (Discover) 中抓取信息并为此编写了一个脚本。它 returns 一切正常,但返回的是“已注销”页面,而不是带有我的余额的所需主页。
我的乱码如下:
import requests
from bs4 import BeautifulSoup as bs
def scrapeDiscover():
URL = 'https://portal.discover.com/customersvcs/universalLogin/signin'
request_URL = 'https://portal.discover.com/customersvcs/universalLogin/signin'
HEADERS = {'User-Agent':'User-Agent: Mozilla/5.0 (Windows NT; Windows NT 6.2; en-US) WindowsPowerShell/4.0', 'Origin':'https://portal.discover.com', 'Referer':'https://portal.discover.com/customersvcs/universalLogin/ac_main'}
s = requests.session()
PAYLOAD = {
'userID' : 'username',
'password' : 'password',
'choose-card' : 'Credit Card',
'pm_fp' : 'version=-1&pm_fpua=mozilla/5.0 (x11; linux x86_64) applewebkit/537.36 (khtml, like gecko) chrome/95.0.4638.69 safari/537.36|5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36|Linux x86_64&pm_fpsc=24|1920|1080|1053&pm_fpsw=&pm_fptz=-6&pm_fpln=lang=en-US|syslang=|userlang=&pm_fpjv=0&pm_fpco=1',
'currentFormId' : 'login',
'userTypeCode' : 'C',
'rememberOption' : 'on',
}
login_req = s.post(URL, headers=HEADERS, data=PAYLOAD)
cookies = login_req.cookies
soup = bs(s.get('https://card.discover.com/cardmembersvcs/achome/homepage').text, 'html.parser')
balance = soup.text
print(balance)
scrapeDiscover()
我还查看了所需的 post 请求信息,并将其放在此处:
如有任何帮助或建议,我们将不胜感激!即使只是一个建议也会有很大帮助。非常感谢大家!如果需要更多信息,请告诉我。
编辑:添加信息 我想 post 请求中可能缺少一些 cookie 或令牌,但我已经多次检查代码并找到任何在 implimented 时有效的东西,或者即使我正确地实现它也是如此。
一些让我印象深刻的事情:
SSID:在 post 请求的 'Form Data' 中,有一个带有长字符串的 'ssid' 形式。然而,这每次都会改变,我想象它代表 'session ID' 而我不需要它,因为我的代码正在创建一个新的 session.
ssid: 0433c923-6f48-4832-8d6d-b26c5b0e6d4-1637097180562
STRONGAUTHSVS:我发现的另一件事是这个“STRONGAUTHSVS”变量(嵌套在一长串 cookie 中,既在请求中又在接收中 headers)
STRONGAUTHSVCS=SASID=null&SATID=b081-
sectoken:最后看到work token,觉得应该就是这个了。 Cookie 中的一个变量,变量名是 'sectoken'。不知道它是什么,也不知道我会如何实现它。
sectoken=hJNQgh7EOnH1xx1skqQqftbV/kE=
对于所有这些,我已经尽力将它们嵌入到我的代码中的 headers 中,但它似乎对输出没有影响。 我附上了网站 cookie 的 pastebin 和捕获的表单数据(减去任何敏感数据)。如果有人有任何想法,我将非常感激! https://pastebin.com/PNnV6Mpw
阅读this。我认为,出于安全原因,您的 POST 请求可能需要一个令牌。如果只是抓取很重要,请尝试使用硒。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Firefox()
driver.get("https://portal.discover.com/customersvcs/universalLogin/signin")
driver.maximize_window()
log_in = (
WebDriverWait(driver, 5)
.until(
EC.element_to_be_clickable(
(By.XPATH, "/html/body/div[1]/header/div[1]/div[2]/div[2]/ul/li[3]/a")
)
)
.click()
)
driver.find_element_by_xpath("//*[@id='userid']").send_keys("your_user_id")
driver.find_element_by_xpath("//*[@id='password']").send_keys("your_password")
driver.find_element_by_xpath("//*[@id='log-in-button']").click()
当我使用左侧面板登录时出现错误。