首页 文章

scrapy Xpath查询选择输入标记元素(赏金)

提问于
浏览
0

我正在使用scrapy crawl spider并尝试解析输出页面以选择所有输入标记参数,如下所示:

  • 输入类型:必须是(文本或密码或文件)

  • 输入id:如果找不到,请选择[输入名称] .

我在scrapy shell中测试了一个示例代码,但它没有给我确切的结果,所以,你能帮助我吗?

测试网站:http://testaspnet.vulnweb.com/Signup.aspx

>>> hxs.select('//input[@id] | //input[@type="text"] | /text()').extract()

[u'<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKLTY0MzI4NjU4Mw9kFgICAQ9kFgICAQ9kFgQCAQ8WBB4EaHJlZgUKbG9naW4uYXNweB4JaW5uZXJodG1sBQVsb2dpbmQCAw8WBB8AZB4HVmlzaWJsZWhkZHEZ3VN6SP/C2xESDN/Y3p8zhfSB">',

 u'<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWWgKJ+8rsBQLStq24BwK3jsrkBALF97vxAQKozoCcCQKpzpj7DgKSnr/eCQKSnr/eCQKSntPyAgKSntPyAgKSnseJCgKSnseJCgKSnvusAwKSnvusAwKSnu/DDAKSnu/DDAKSnoPmBQKSnoPmBQKSnre9DQKSnre9DQKSnqvQBgKSnqvQBgKSnp+5AwKSnp+5AwKSnrPcDAKSnrPcDAL3pJ3FDwL3pJ3FDwL3pLGYBwL3pLGYBwL3pKU/AvekpT8C96TZ0wkC96TZ0wkC96TN9gIC96TN9gIC96ThjQoC96ThjQoC96SVoAMC96SVoAMC96SJxwwC96SJxwwC96T9rAkC96T9rAkC96SRwwIC96SRwwICyMvj6AUCyMvj6AUCyMuXjw0CyMuXjw0CyMuLogYCyMuLogYCyMu/+Q8CyMu/+Q8CyMvTnQcCyMvTnQcCyMvHMALIy8cwAsjL+9cJAsjL+9cJAsjL7+oCAsjL7+oCAsjLw9MPAsjLw9MPAsjL9/YIAsjL9/YIAq3SwZ8KAq3SwZ8KAq3S9bIDAq3S9bIDAq3S6ckMAq3S6ckMAq3SnewFAq3SnewFAq3SsYMNAq3SsYMNAq3SpaYGAq3SpaYGAq3S2foPAq3S2foPAq3SzZEHAq3SzZEHAq3SofkFAq3SofkFAq3S1Z0NAq3S1Z0NAob5pwUChvmnBQKG+dvZCQKG+dvZCaCOP7DYDQ3mNEhISrmdoTKH9Tws">',

  u'<input name="tbUsername" type="text" id="tbUsername" class="Login">',

  u'<input name="tbPassword" type="password" id="tbPassword" class="Login">',

  u'<input type="submit" name="btnSignup" value="Sign me up" id="btnSignup">']

2 回答

  • 2

    textpasswordfile 类型的所有 input 元素:

    //input[@type='text' or @type='password' or @type='file']
    

    我不确定你想要在id或名称上的条件 - 这将获得具有id或名称的这三种类型的所有 input 元素:

    //input[(@type='text' or @type='password' or @type='file') and (@id or @name)]
    

    如果你想测试id或名称(如果id不存在)等于某事( XXXX ):

    //input[(@type='text' or @type='password' or @type='file') and (@id='XXXX' or (not(@id) and @name='XXXX'))]
    

    如果要提取id:

    //input[@type='text' or @type='password' or @type='file']/@id
    

    如果没有指定id,我不认为使用标准XPath来追踪id或名称 .

  • 0

    我不知道Scrapy,但从纯粹的XPath角度来看,以下内容应该满足您描述的要求:

    //input[(@id or @name) and (@type = 'text' or @type = 'password' or @type = 'file')]
    

    另外,我注意到您正在尝试检索所选节点的文本内容 . 这可能不会返回任何内容,因为输入是自动关闭的标签,并且不包含内部内容 .

相关问题