0.参考

https://developer.mozilla.org/zh-CN/docs/Web/CSS/Pseudo-elements

https://developer.mozilla.org/zh-CN/docs/Web/CSS/::before

https://developer.mozilla.org/en-US/docs/Web/API/Window/getComputedStyle

0.1 Use with pseudo-elements

getComputedStyle can pull style info from pseudo-elements (for example, ::after::before::marker::line-marker—see spec here).

<style>h3::after {content: ' rocks!';}
</style><h3>generated content</h3> <script>var h3 = document.querySelector('h3'); var result = getComputedStyle(h3, ':after').content;console.log('the generated content is: ', result); // returns ' rocks!'
</script>

0.2 手动设置伪元素信息

  

0.3 理论上应该是可以直接通过 js 读取伪元素 content 的。。。然而这里读取不到 ::before 的 content

1.初步抓取

1.1不加载js VS 加载js

1.2 requests仅见一张table

In [1]: import requests...: from scrapy import Selector...:...:...: url = 'https://car.autohome.com.cn/config/series/3170.html'...: s = requests.Session()...: s.verify = False...: s.headers = {...:     'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36'...: }...:...: r = s.get(url)...: sel = Selector(text=r.text)...:...: sel.css('table')...:Out[1]: [<Selector xpath='descendant-or-self::table' data='<table class="t1 txtCen" width="100%">\n '>]

View Code

1.3 selenium可见所有table

In [3]: from scrapy import Selector...: from selenium import webdriver...:...:...: url = 'https://car.autohome.com.cn/config/series/3170.html'...: dr = webdriver.Chrome()...: dr.get(url)...: sel = Selector(text=dr.page_source)...: sel.css('table')...:DevTools listening on ws://127.0.0.1:12968/devtools/browser/2e9adb31-7510-421f-ac13-835350af144e
Out[3]:
[<Selector xpath='descendant-or-self::table' data='<table class="t1 txtCen" width="100%">\n '>,<Selector xpath='descendant-or-self::table' data='<table cellspacing="0" cellpadding="0" c'>,<Selector xpath='descendant-or-self::table' data='<table id="tab_side" cellspacing="0" cel'>,<Selector xpath='descendant-or-self::table' data='<table cellspacing="0" cellpadding="0" c'>,<Selector xpath='descendant-or-self::table' data='<table id="tab_0" cellspacing="0" cellpa'>,<Selector xpath='descendant-or-self::table' data='<table id="tab_1" cellspacing="0" cellpa'>,<Selector xpath='descendant-or-self::table' data='<table id="tab_2" cellspacing="0" cellpa'>,<Selector xpath='descendant-or-self::table' data='<table id="tab_3" cellspacing="0" cellpa'>,<Selector xpath='descendant-or-self::table' data='<table id="tab_4" cellspacing="0" cellpa'>,<Selector xpath='descendant-or-self::table' data='<table id="tab_5" cellspacing="0" cellpa'>,<Selector xpath='descendant-or-self::table' data='<table id="tab_100" cellspacing="0" cell'>,<Selector xpath='descendant-or-self::table' data='<table id="tab_101" cellspacing="0" cell'>,<Selector xpath='descendant-or-self::table' data='<table id="tab_102" cellspacing="0" cell'>,<Selector xpath='descendant-or-self::table' data='<table id="tab_103" cellspacing="0" cell'>,<Selector xpath='descendant-or-self::table' data='<table id="tab_104" cellspacing="0" cell'>,<Selector xpath='descendant-or-self::table' data='<table id="tab_105" cellspacing="0" cell'>,<Selector xpath='descendant-or-self::table' data='<table id="tab_106" cellspacing="0" cell'>,<Selector xpath='descendant-or-self::table' data='<table id="tab_107" cellspacing="0" cell'>,<Selector xpath='descendant-or-self::table' data='<table id="tab_108" cellspacing="0" cell'>]

View Code

1.4 提取table信息

In [4]: for t in sel.css('table#tab_0'):...:     print('@'*10)...:     for row in t.xpath('.//tr'):...:         print('-'*100)...:         for col in row.xpath('.//th|.//td'):...:             print(''.join(col.xpath('.//node()/text()').extract()), end='\t')...:         print()...:
@@@@@@@@@@
----------------------------------------------------------------------------------------------------
基本参数
----------------------------------------------------------------------------------------------------
厂      -       -       -       -       -       -       -       -       -       -       -       -
----------------------------------------------------------------------------------------------------
级别
----------------------------------------------------------------------------------------------------
能源类型        汽油    汽油    汽油    汽油    汽油    汽油    汽油    汽油    汽油    汽油    汽油    汽油
----------------------------------------------------------------------------------------------------
上市    2017.10 2017.10 2017.10 2017.10 2017.10 2017.10 2017.10 2017.10 2017.10 2017.10 2017.10 2017.10
----------------------------------------------------------------------------------------------------
(kW)    110     110     110     110     140     140     110     110     110     110     140     140
----------------------------------------------------------------------------------------------------
(N·m)  250     250     250     250     320     320     250     250     250     250     320     320
----------------------------------------------------------------------------------------------------
发动机  1.4T 150马力 L4 1.4T 150马力 L4 1.4T 150马力 L4 1.4T 150马力 L4 2.0T 190马力 L4 2.0T 190马力 L4 1.4T 150马力 L4 1.4T 150马力 L4 1.4T 150马力 L4 1.4T 150马力 L4 2.0T 190马力 L4 2.0T 190马力 L4
----------------------------------------------------------------------------------------------------
变速箱  7挡双离合       7挡双离合       7挡双离合       7挡双离合       7挡双离合       7挡双离合       7挡双离合       7挡双离合       7挡双离合       7挡双离合       7挡双离合       7挡双离合
----------------------------------------------------------------------------------------------------
长*宽*高(mm)    4312*1785*1426  4321*1785*1426  4312*1785*1426  4321*1785*1426  4312*1785*1426  4321*1785*1426  4457*1796*1417  4462*1796*1417  4457*1796*1417  4462*1796*1417  4457*1796*1417  4462*1796*1417
----------------------------------------------------------------------------------------------------
车身结构        5门5座两厢车    5门5座两厢车    5门5座两厢车    5门5座两厢车    5门5座两厢车    5门5座两厢车    4门5座三厢车    4门5座三厢车    4门5座三厢车    4门5座三厢车    4门5座三厢车    4门5座三厢车
----------------------------------------------------------------------------------------------------
最高车速(km/h)  215     215     215     215     230     230     215     215     215     215     230     230
----------------------------------------------------------------------------------------------------
官方0-100km/h加速(s)    8.4     8.4     8.4     8.4     7.4     7.4     8.4     8.4     8.4     8.4     7.4     7.4
----------------------------------------------------------------------------------------------------
0-100km/h加速(s)        -       -       -       -       -       -       -       -       -       -       -       -
----------------------------------------------------------------------------------------------------
100-0km/h制动(m)        -       -       -       -       -       -       -       -       -       -       -       -
----------------------------------------------------------------------------------------------------
工信部(L/100km) 5.7     5.7     5.7     5.7     6.2     6.2     5.6     5.6     5.6     5.6     6.1     6.1
----------------------------------------------------------------------------------------------------
(L/100km)       -       -       -       -       -       -       -       -       -       -       -       -
----------------------------------------------------------------------------------------------------
整车    三10公里        三10公里        三10公里        三10公里        三10公里        三10公里        三10公里        三10公里        三10公里        三10公里        三10公里        三10公里

View Code

1.5 对比可见提取table信息不全

2.问题分析

2.1 开发者工具显示 '商' 为CSS伪元素的content属性

2.2 使用正常浏览器硬性刷新未见CSS文件存在有效对应信息

2.3 检查发现class name存在规律:hs_kw数字_configyk

.hs_kw22_configyk::before {
content: "商";
}

.hs_kw44_configyk::before {
content: "一汽";
}

2.4 selector提取存在多个class name后缀,而且无法提取到其中文字

In [19]: sel = Selector(text=dr.page_source)In [20]: sel.css('span[class*="hs_kw"]').extract()
Out[20]:
['<span class="hs_kw34_configyk"></span>','<span class="hs_kw66_configyk"></span>',
...'<span class="hs_kw42_optionLA"></span>',
]

2.5 使用正常浏览器全局搜索 hs_kw 和 hs_kw22_configyk 和 configyk ,仅发现关联文件 3170.html

2.6 Sources面板对 3170.html 进行美化排版,复制到 notepad++ 搜索关键字定位到 js 代码段

继续搜索

2.7 复制其中一个代码片段到 Sources 面板作为 snippet,移除头尾 <script> </script>,添加断点

2.8 运行代码片段,发现可疑变量

2.9 根据关键字定位到相关函数(运气好的话),添加log语句,重新运行输出中间变量

3 完整代码

http://www.cnblogs.com/my8100/p/9028359.html

4 运行结果

5.彩蛋(前端都这么直白?!)

转载于:https://www.cnblogs.com/my8100/p/js_qichezhijia.html

[JS 分析] 汽_车_之_家 JS 生成 CSS 伪元素 hs_kw44_configUS::before相关推荐

  1. JS操作CSS伪元素

    参考链接: segmentfault MDN CSSStyleSheet QQ群闲逛,看到有人说js不能操作css的伪元素样式, 之前没有遇到过应用场景,我当时想到的就是操作通过操作class来控制样 ...

  2. js来控制、修改CSS伪元素的方法

    例如,我的样式表有以下规则,需要把伪元素的content内容进行修改 <style>p:after{content:'after伪元素'} </style> <p id= ...

  3. css 商城 两列_如何使用css伪元素实现超实用的图标库(附源码)

    今天我们来复盘一下前端中css伪元素的知识以及如何用css伪元素来减轻javascript的压力,做出一些脑洞大开的图形. 预备知识 伪元素 伪元素是一个附加至选择器末的关键词,允许你对被选择元素的特 ...

  4. 分答项目_知识点:如何获取jquery选择器生成的input元素数组中的每个input元素的值?

    我最初的想法: (1)jquery选择器获取后将dom元素放到attachnew中了,在遍历数组中可以attachnew[i].value属性即可获取input元素的值: (2)此处用的attachn ...

  5. css修改select选择框option被选中的背景颜色_这 16 个 CSS 伪类,助你提升布局效率!

    作者:Chidume Nnamdi 译者:前端小智 来源:mediuum 大家都说简历没项目写,我就帮大家找了一个项目,还附赠[搭建教程]. css 伪类是用于向某些选择器添加特殊的效果,是动态的,指 ...

  6. [JS 分析] 天_眼_查 字体文件

    0. 参考 js分析 猫_眼_电_影 字体文件 @font-face 1. 分析 1.1 定位目标元素 1.2 查看网页源代码 1.3 requests 请求提取得到大量错误信息 对比猫_眼_电_影抓 ...

  7. SpringBoot入门到精通_第3篇 _应用组件分析

    接上一篇:SpringBoot入门到精通_第2篇 _1分钟实战需求项目 https://blog.csdn.net/weixin_40816738/article/details/101095964 ...

  8. UnityStandardAsset工程、源码分析_4_赛车游戏[玩家控制]_摄像机控制

    上一章地址:UnityStandardAsset工程.源码分析_3_赛车游戏[玩家控制]_特效.声效 经过前几章的分析,我们已经大致地了解了车辆控制相关的脚本.现在还有最后一个与玩家体验息息相关的部分 ...

  9. 采用CSS+JS实现简洁的滑动导航栏_网页代码站(www.webdm.cn)

    1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.or ...

最新文章

  1. ModuleNotFoundError: No module named 'sklearn.cross_validation'
  2. Fusion360操作记录
  3. Android屏幕信息获取
  4. 分布式系统原理 之2 基本副本协议
  5. Linux Perl 升级
  6. oracle 10g real application clusters introduction (RAC原理)
  7. 31、SAM文件中flag含义解释工具--转载
  8. apache fop_Apache FOP与Eclipse和OSGi的集成
  9. 【渝粤题库】国家开放大学2021春2509学前教育学题目
  10. 【华为云技术分享】云小课 | SAP扩容实战
  11. 串口发送图片VGA显示
  12. Jasmine基础API
  13. 852 -山脉阵列中的峰值指数
  14. margin和padding的学习
  15. php计算周长,PHP实现的简单三角形、矩形周长面积计算器分享
  16. Windows 7 登录界面背景图片定制
  17. (附源码)计算机毕业设计SSM原创网络文学管理系统
  18. Unity3D坦克大战游戏开发——学习笔记(中)
  19. SOLIDWORKS 2022官方正版新功能介绍
  20. 最新内核仿某里巴巴的小说网站源码+支持响应式

热门文章

  1. mysql查询今天、昨天、7天、近30天、本月、上一月 数据
  2. js比较运算符==与===的区别
  3. 【经验】广西集体户口迁回农村原籍超级攻略
  4. WebStorm荣获InfoWorld2014年度科技奖
  5. domains where phd is best in business school
  6. statistics DATA in CHINA
  7. 我建议您还是不要尝试和外国人讨论文学了,您干不过的。。。还是跟他们拼数学,逻辑,编程比较合适
  8. Unity 中使用Async-Await替代 coroutines
  9. sql server 2008 远程连接配置
  10. Linux 系统内存分析