CSS位置偏移反爬虫绕过

Posted web安全工具库

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CSS位置偏移反爬虫绕过相关的知识,希望对你有一定的参考价值。

0x01 初始化浏览器对象

bs=webdriver.Chrome()

0x02 访问网站

bs.get('https://antispider3.scrape.center/'

0x03 等待出现结果,然后再获取数据

wt=WebDriverWait(bs,10)#创建一个等待的对象,等待10秒
wt.until(ec.presence_of_all_elements_located((By.CSS_SELECTOR,'.item')))#当节点id是item出现的时候获取数据
print(bs.page_source[:100]) #获取源码 前100个字节

0x04 获取网页源码并通过PyQuery初始化

html=bs.page_source
doc=py(html)

0x05 获取源码中所有类item下的类name

names=doc('.item .name')

0x06 将获取的列表打印出来,并关闭创建的浏览器

for name in names.items():
    print(name.text())
bs.close()

0x07 运行结果,发现字体的顺序都不对

Wonder
风 清 白 家
上 结 ( 宠 老 法 篇 终 的 妃 下 ) 册
士 为 知 己 ( 全 二 册 )
那 些 年 , 我 们 一 起 追 的 女 孩
全 倾 非 三 ( ) 城 我 册
明 些 儿 那 朝 事
我 和 你 的 笑 忘 书
王 小 波 全 集 第 一 卷
怦 然 动 心
龙枪编年史(全3册)
全 三 ( 奇 ) 传 册 枪 龙
明 黎 之 街
示 理 启 认 及 知 学 其 心
银河帝国2:基地与帝国
基 : 国 地 帝 河 银
解 四 年 - 材 教 学 下 文 小 全 级 语
越界言论(第3卷)

0x08 分析原因

正确的顺序应该是按后面的值排序,所以我们只要再获取一个style的值,然后进行排序

def paixu(name):
    ts=name('.whole')#一种根据类whole判断
    if ts:
        return name.text()
    else:
        chars=name('.char')#另一种根据类char判断
        items=[]
        for char in chars.items():#将过滤后的内容填写到一个列表里
            items.append(
                'text':char.text().strip(),'left':int(re.search('(\\d+)px',char.attr('style')).group(1))
            )
        items=sorted(items,key=lambda x: x['left'],reverse=False)#根据关键字left排序
        return ''.join([item.get('text') for item in items])#只返回text的内容

0x09 最终源码

import re


from selenium import webdriver
from pyquery import PyQuery as py
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec




def paixu(name):
    ts=name('.whole')
    if ts:
        return name.text()
    else:
        chars=name('.char')
        items=[]
        for char in chars.items():
            items.append(
                'text':char.text().strip(),'left':int(re.search('(\\d+)px',char.attr('style')).group(1))
            )
        items=sorted(items,key=lambda x: x['left'],reverse=False)
        return ''.join([item.get('text') for item in items])


bs=webdriver.Chrome()
bs.get('https://antispider3.scrape.center/')
wt=WebDriverWait(bs,10)
wt.until(ec.presence_of_all_elements_located((By.CSS_SELECTOR,'.item')))
html=bs.page_source
doc=py(html)
names=doc('.item .name')


for i in names.items():
     name=paixu(i)
     print(name)
bs.close()

0x10 声明

本内容摘自《Python3网络爬虫开发实战 第二版》作者:崔天才

仅供安全研究与学习之用,若将工具做其他用途,由使用者承担全部法律及连带责任,作者不承担任何法律及连带责任。

欢迎关注公众号编程者吧

以上是关于CSS位置偏移反爬虫绕过的主要内容,如果未能解决你的问题,请参考以下文章

24. CSS偏移反爬见过没,打开本文你就能学会 | 爬虫训练场

24. CSS偏移反爬见过没,打开本文你就能学会 | 爬虫训练场

Python冒充其他浏览器抓取猫眼电影数据(绕过反爬虫)

01 反js的根本原因

爬虫与反爬虫系统的设计思路与策略

爬虫与反爬虫系统的设计思路与策略