python - Splash:网站在呈现时将浏览器检测为阻止 Cookie
问题描述
我对 splash/scrapy 很陌生,目前正试图抓取一个需要登录/身份验证的基于 javascript 的网站。代替模拟浏览器浏览页面方式的 Selenium,我尝试使用 Scrapy,因为我需要抓取的页面数量以及网站和启动的速度使 scrapy 能够通过基于 javascript 的页面进行抓取。但是,每当我尝试爬取 scrapy 项目时,网站似乎检测到浏览器正在阻止 cookie,如下所示。
下面是我的代码:
class CiqbankSpider(scrapy.Spider):
name = 'ciqbank'
allowed_domains = ['capitaliq.com']
start_urls = 'https://capitaliq.com/'
login_page = 'https://www.capitaliq.com/ciqdotnet/login-sso.aspx?'
def start_requests(self):
LUA_SCRIPT = """
function main(splash, args)
splash:init_cookies(splash.args.cookies),
splash:go("https://www.capitaliq.com/ciqdotnet/login-sso.aspx?"),
splash:wait(15),
local title = splash.evaljs("document.title"),
return {
title=title,
cookies = splash:get_cookies(),
},
end
"""
yield SplashRequest(
url=self.login_page,
callback=self.parse_login,
dont_filter=True,
endpoint='execute',
args={'wait':15}),'lua_source':LUA_SCRIPT})
def parse_login(self,response):
return FormRequest.from_response(
response,
formdata={
'__VIEWSTATE': response.xpath("//*[@id='__VIEWSTATE']/@value").extract_first(),
'__VIEWSTATEGENERATOR': response.xpath("//*[@id='__VIEWSTATEGENERATOR']/@value").extract_first(),
'__EVENTVALIDATION': response.xpath("//*[@id='__EVENTVALIDATION']/@value").extract_first(),
'captchaValidated': '0',
'username': '******',
'password': '******',
'PersistentLogin': 'false'
},callback=self.parse_afterlogin
)
def parse_afterlogin(self,response):
if response.xpath('//a[@href="/CIQDotNet/Logout.aspx"]/text()').extract_first() is not None:
print("Successfully Logged In")
Account_Name = response.xpath('//div[@class="cPageTitle"]/div/span/text()').extract_first
print("Account Name: "+Account_Name.replace('Welcome ',''))
else:
print("\nLogin unsucessful\n")
open_in_browser(response)
yield
起初我认为这与 POST 请求有关,因为我不熟悉 Viewstate 的东西,所以我尝试使用 scrapy-selenium 组合来解决问题,但这也不起作用。事实证明,问题出在 Splash 上,因为当我尝试在 splash (localhost) 上渲染页面时,我从网站截图中得到了相同的消息,但没有登录。有人知道如何解决这个问题吗?非常感谢。
解决方案
推荐阅读
- regex - 正则表达式在字符后获取特定模式
- c# - 在另一个表中附加图像的正确语法查询是什么?
- ringcentral - 有没有办法使用 RingCentral API 查看 RingCentral App(以前的 Glip)视频通话统计信息?
- java - 如何在java中加密字符串
- php - 更新记录时出错 您的 SQL 语法有误
- solr - 影响 Solr 拼写检查
- php - Twig 在前端检查未定义
- php - 自 Symfony 4.2 在功能测试期间不推荐使用没有根节点的树构建器
- c# - 无法“始终复制”SQLite.Interop.dll Visual Studio 2017 社区
- javascript - 如何在视图内设置文本而不会在本机反应中溢出?