爬虫——动作链、xpath、打码平台使用
生活随笔
收集整理的這篇文章主要介紹了
爬虫——动作链、xpath、打码平台使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
系列文章目錄
第一章 爬蟲——爬蟲初識、requests模塊
第二章 代理搭建、爬取視頻網站、爬取新聞、BeautifulSoup4介紹、bs4 遍歷文檔樹、bs4搜索文檔樹、bs4使用選擇器
第三章 selenium基本使用、無界面瀏覽器、selenium的其他用法、selenium的cookie、爬蟲案例
第四章 動作鏈、xpath、打碼平臺使用
文章目錄
- 系列文章目錄
- 一、動作鏈
- 二、xpath
- 三、打碼平臺使用
一、動作鏈
模擬按住鼠標拖動的效果,或者是在某個標簽上的某個位置點擊的效果,主要用來做驗證碼的破解(滑動驗證碼)
動作鏈事件表:
| click(on_element=None) | 單擊鼠標左鍵 |
| click_and_hold(on_element=None) | 點擊鼠標左鍵,不松開 |
| context_click(on_element=None) | 點擊鼠標右鍵 |
| double_click(on_element=None) | 雙擊鼠標左鍵 |
| drag_and_drop(source, target) | 拖拽到某個元素然后松開 |
| drag_and_drop_by_offset(source, xoffset, yoffset) | 拖拽到某個坐標然后松開 |
| key_down(value, element=None) | 按下某個鍵盤上的鍵 |
| key_up(value, element=None) | 松開某個鍵 |
| move_by_offset(xoffset, yoffset) | 鼠標從當前位置移動到某個坐標 |
| move_to_element(to_element) | 鼠標移動到某個元素 |
| move_to_element_with_offset(to_element, xoffset, yoffset) | 移動到距某個元素(左上角坐標)多少距離的位置 |
| perform() | 執行鏈中的所有動作(一般所有動作排列好后才執行) |
| release(on_element=None) | 在某個元素位置松開鼠標左鍵 |
| send_keys(*keys_to_send) | 發送某個鍵到當前焦點的元素 |
| send_keys_to_element(element, *keys_to_send) | 發送某個鍵到指定元素 |
動作鏈的使用:
1.先拿到動作鏈對象(也就是標簽)
2.對動作鏈對象設置動作事件(先設置的先執行)
3.動作設置完畢使用perform執行
模擬滑動驗證碼
from selenium import webdriver from selenium.webdriver import ActionChains import time from selenium.webdriver.common.by import By driver = webdriver.Edge() driver.get('http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable') driver.implicitly_wait(10) # 使用隱式等待driver.maximize_window()try:driver.switch_to.frame('iframeResult') ##切換到iframeResultsourse=driver.find_element(By.ID,'draggable')target=driver.find_element(By.ID,'droppable')#方式一:基于同一個動作鏈串行執行# actions=ActionChains(driver) #拿到動作鏈對象# actions.drag_and_drop(sourse,target) #把動作放到動作鏈中,準備串行執行actions=ActionChains(driver).click_and_hold(sourse) # 對動作鏈對象使用click_and_hold為拖住sourse標簽元素actions.drag_and_drop_by_offset(target,10,20) # drag_and_drop_by_offset為將actions對象拖到距離target對象的左側10px、高20px的位置actions.perform()time.sleep(10)finally:driver.close() from selenium import webdriver from selenium.webdriver import ActionChains import time from selenium.webdriver.common.by import By driver = webdriver.Edge() driver.get('http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable') driver.implicitly_wait(10) # 使用隱式等待driver.maximize_window()try:driver.switch_to.frame('iframeResult') ##切換到iframeResultsourse=driver.find_element(By.ID,'draggable')target=driver.find_element(By.ID,'droppable')#方式二:不同的動作鏈,每次移動的位移都不同ActionChains(driver).click_and_hold(sourse).perform()distance = target.location['x'] - sourse.location['x'] # 兩個控件之間的x軸的距離track=0while track < distance:ActionChains(driver).move_by_offset(xoffset=20,yoffset=0).perform()# 移動量為xoffsettrack+=20 # 此處只是控制循環條件ActionChains(driver).release().perform()time.sleep(10)finally:driver.close()二、xpath
一般解析庫都會有子的的搜索標簽的方法,一般都會支持css和xpath
XPath 是一門在 XML 文檔中查找信息的語言
| 標簽名 | 找對應標簽名的標簽,如div、p、a等 |
| / | 找當前節點下的標簽 |
| // | 找當前節點子子孫孫下的標簽 |
| . | 表示當前節點 |
| . . | 表示上一層 |
| @ | 表示取屬性,如@id=‘xxx’、@href=‘www.baidu.com’ |
例如:
[@id="cnblogs_post_body"]/p[9]/strong 1.獲取id為cnblogs_post_body的對象 [@id="cnblogs_post_body"] 2.當前路徑下拿到第九個p標簽 /p[9] 3.當前節點下的strong標簽 /strong三、打碼平臺使用
驗證碼的破解
簡單的數字字母組合可以使用圖像識別(python 現成模塊),成功率不高
使用第三方打碼平臺(破解驗證碼平臺),花錢,把驗證碼圖片給它,它給你識別完,返回給你
例如:
超級鷹
總結
以上是生活随笔為你收集整理的爬虫——动作链、xpath、打码平台使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 十七、打码平台的使用
- 下一篇: 数据分析金庸武侠经典人物,我们喜欢江湖中