成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一日一技:Selenium 抓不到的內容

安全 應用安全
有一些同學在寫爬蟲的時候,過于依賴 Selenium,覺得只要使用模擬瀏覽器,在不被網站屏蔽的情況下,就可以爬到任何內容。

 [[396365]]

有一些同學在寫爬蟲的時候,過于依賴 Selenium,覺得只要使用模擬瀏覽器,在不被網站屏蔽的情況下,就可以爬到任何內容。

今天我們不討論字體反爬蟲和 CSS 反爬蟲這兩種情況。我們來看一段非常簡單的網頁。這個網頁只有一個HTML 文件,不加載特殊字體,不加載 CSS 文件。

這個網頁的奇怪之處在哪里呢?我們試一試使用 XPath Helper 來提取網頁上面的紅色文字,發現XPath 竟然無法找到這段文字,如下圖所示:

然后我們使用 Selenium 來試一試:

Selenium果然無法獲取 紅字到內容。我們再打印一下網頁的源代碼:

這一次,Selenium 獲取到的源代碼,竟然跟 Chrome 開發者工具里面顯示的源代碼不一樣?

這個問題的關鍵,就在開發者工具里面的這樣一段文字:

 

因為這個節點是一個shadow DOM[1]。shadow DOM 的行為跟 iframe很像,都是把一段HTML 信息嵌入到另一個 HTML 中。但不同的是,iframe被嵌入的地址需要額外再搭建一個 HTTP服務,而 shadow DOM 可以只嵌入一段 HTML 代碼,所以它比 iframe 更節省資源。

在上面的截圖中,通過下面這三行代碼,我們把一個新的

標簽嵌入到了原來的 HTML 中:

  1. var content = document.querySelector('.content'); 
  2.     var root = content.attachShadow({mode: 'open'}); 
  3.     root.innerHTML = '<p class="real_content" style="color: red">你抓不到這段文字的!</p>' 

而這個被嵌入的影子標簽,就像 iframe 一樣,是無法直接使用 Selenium 提取的。如果強行提取,那么,我們需要使用 JavaScript 獲取 shadow DOM,然后再進行提取。我們來看一段可以正常工作的代碼:

  1. shadow = driver.execute_script('return document.querySelector(".content").shadowRoot'
  2. content = shadow.find_element_by_class_name('real_content'
  3. print(content.text) 

運行效果如下圖所示:

這段代碼,首先通過 JavaScript 找到shadow-root的父節點元素,然后返回這個元素的.shadowRoot屬性。在 Python 里面拿到這個屬性以后,使用.find_element_by_class_name()方法獲取里面的內容。

要特別注意的是,拿到shadow-root節點以后,只能通過 CSS 選擇器進一步篩選里面的內容,不能用 XPath,否則會導致報錯。

參考資料

[1]

shadow DOM: https://developer.mozilla.org/zh-CN/docs/Web/Web_Components/Using_shadow_DOM

本文轉載自微信公眾號「未聞Code」,可以通過以下二維碼關注。轉載本文請聯系未聞Code公眾號。

 

責任編輯:武曉燕 來源: 未聞Code
相關推薦

2022-03-07 09:14:04

Selenium鼠標元素

2023-07-07 09:04:21

JSON信息微信

2021-10-15 21:08:31

PandasExcel對象

2022-06-28 09:31:44

LinuxmacOS系統

2024-11-13 09:18:09

2021-04-05 14:47:55

Python多線程事件監控

2022-03-12 20:38:14

網頁Python測試

2021-12-16 19:04:26

瀏覽器SeleniumChrome

2025-05-28 03:15:00

Scrapy數據sleep

2021-04-12 21:19:01

PythonMakefile項目

2023-10-28 12:14:35

爬蟲JavaScriptObject

2021-09-13 20:38:47

Python鏈式調用

2021-03-12 21:19:15

Python鏈式調用

2024-07-30 08:16:18

Python代碼工具

2021-04-19 23:29:44

MakefilemacOSLinux

2024-07-30 08:11:16

2024-11-11 00:38:13

Mypy靜態類型

2024-05-24 09:07:06

JSONprint字符串

2024-07-19 18:23:17

2021-07-27 21:32:57

Python 延遲調用
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久99网 | 在线播放中文字幕 | 精品久久国产 | 日韩欧美三区 | 中文字幕国产精品 | 午夜视频在线观看一区二区 | 成人精品国产一区二区4080 | 欧美一级免费 | 久久国产精品久久久久久 | hitomi一区二区三区精品 | 成人免费视频网站在线看 | 精品国产乱码久久久 | 91亚洲精选 | 免费精品一区 | 无码日韩精品一区二区免费 | 日本不卡一区二区三区在线观看 | 日韩成人精品 | 亚洲三区在线观看 | 在线观看国产视频 | 国产精品1区2区 | 欧美一区二区在线播放 | 色在线免费 | 伊人春色成人网 | www.99久久.com| 国产免费一区二区三区最新6 | 美女视频一区二区三区 | 久久伊| 午夜影院在线观看 | 精品99爱视频在线观看 | 日韩手机视频 | 久久99精品视频 | 亚洲久草 | 人人鲁人人莫人人爱精品 | 国产成人精品一区二区三区在线 | 丁香六月激情 | 91欧美精品成人综合在线观看 | 精品一区二区av | 不卡av电影在线播放 | 日韩一区二区免费视频 | 国产精品成人久久久久 | 天天色图|