Scrapy:无法登录双登录页面:onestop.jdsu.com

时间:2014-09-27 19:23:48

标签: asp.net login web-scraping scrapy

我正在开发一个内部使用的刮刀并评估我公司的合作伙伴网站onestop.jdsu.com。该网站实际上是ASPX网站。

我无法通过scrapy登录页面:https://onestop.jdsu.com/_layouts/JDSU.OneStop/Login.aspx?ReturnUrl=%2f_layouts%2fAuthenticate.aspx%3fSource%3d%252F&Source=%2F

在页面上实际上有两种登录方法,我认为我在scrapy蜘蛛中区分它们有问题。我最感兴趣的是#34;合作伙伴登录"虽然使用员工登录登录,这实际上是一个显示下拉登录窗口的脚本,但没问题。

我已经使用过" loginform"从两种形式中提取相关字段。不幸的是,没有相关POST数据的组合似乎有所作为。也许我没有点击合作伙伴表单上的按钮(" ctl00 $ PlaceHolderMain $ loginControl $ login","")?

此外,"登录失败"即使我知道登录必须失败,也不会传递消息。

下面的蜘蛛忽略" __ VIEWSTATE"和" __ EVENTVALIDATION"因为如果包含它们并不会产生影响,它们似乎与页面HTML中的合作伙伴登录无关。

非常感谢任何帮助!


登录测试输出

python ./test.py https://onestop.jdsu.com/_layouts/JDSU.OneStop/Login.aspx?ReturnUrl=%2f_layouts%2fAuthenticate.aspx%3fSource%3d%252F&Source=%2F
[1] 1273
peter-macbook:_loginform-master peter$ [
   "https://onestop.jdsu.com/_layouts/JDSU.OneStop/Login.aspx?ReturnUrl=%2f_layouts%2fAuthenticate.aspx%3fSource%3d%252F", 
   [
      [
         [
            "__VIEWSTATE", 
            "/wEPDwUKMTEzNDkwMDAxNw9kFgJmD2QWAgIBD2QWAgIDD2QWCAIDDxYCHgdWaXNpYmxlaGQCBQ8WAh8AaGQCCw9kFgYCAQ8WAh4EaHJlZgUhL193aW5kb3dzL2RlZmF1bHQuYXNweD9SZXR1cm5Vcmw9ZAIDD2QWAgIDDw8WAh8AaGRkAgUPFgIfAGhkAg0PFgIfAGgWAgIBDw8WAh4ISW1hZ2VVcmwFIS9fbGF5b3V0cy8xMDMzL2ltYWdlcy9jYWxwcmV2LnBuZ2RkZP7gVj0vs2N5c/DzKfAu4DwrFihP"
         ], 
         [
            "__EVENTVALIDATION", 
            "/wEWBALlpOFKAoyn3a4JAuj7pusEAsXI9Y8HY+WYdEUkWKmn7tesA+BODBefeYE="
         ], 
         [
            "ctl00$PlaceHolderMain$loginControl$UserName", 
            "USER"
         ], 
         [
            "ctl00$PlaceHolderMain$loginControl$password", 
            "PASS"
         ], 
         [
            "ctl00$PlaceHolderMain$loginControl$login", 
            ""
         ]
      ], 
      "https://onestop.jdsu.com/_layouts/JDSU.OneStop/Login.aspx?ReturnUrl=%2f_layouts%2fAuthenticate.aspx%3fSource%3d%252F", 
      "POST"
   ]
]

合作伙伴登录的SCRAPY SPIDER

import scrapy

from tutorial.items import WaveReadyItem
#from scrapy import log
#from scrapy.shell import inspect_response

class WaveReadySpider(scrapy.Spider):
    name = "onestop_home-page-3"
    allowed_domains = ["https://onestop.jdsu.com"]
    start_urls = [
                  "https://onestop.jdsu.com/_layouts/JDSU.OneStop/Login.aspx?ReturnUrl=%2f_layouts%2fAuthenticate.aspx%3fSource%3d%252F&Source=%2F",
                  "https://onestop.jdsu.com/Products/network-systems/Pages/default.aspx"
                  ]

    def parse(self, response):
       return scrapy.FormRequest.from_response(
       response,
       formdata={'ctl00$PlaceHolderMain$loginControl$UserName': 'MY-USERID', 'ctl00$PlaceHolderMain$loginControl$password': 'MY-PASSWD',  'ctl00$PlaceHolderMain$loginControl$login': ''},
       callback=self.after_login
       )

    def after_login(self, response):
        # check login succeed before going on
        if "Invalid ID or Password" in response.body:
            self.log("Login failed", level=log.ERROR)
            return

    def parse(self, response):
    #=============================================================================
    #HOME PAGE:  PICK UP OTHER LANDING PAGES IN CENTER COLUMN
    #=============================================================================

etc.  

1 个答案:

答案 0 :(得分:0)

我不知道你失败的原因。但这是我如何使用" loginform"。

def parse(self, response):
    args, url, method = fill_login_form(response.url, response.body, self.username, self.password)
    return FormRequest(url, method=method, formdata=args, callback=self.after_login)

fill_login_form方法将尽力找到正确的登录形式。然后它将返回执行登录所需的所有内容。如果您手动填写表单,可能会遗漏某些内容。