selenuim补充知识与爬虫知识拓展
目录
-
-
图片验证码与滑动验证码的破解思路
-
selenuim其它操作
获取属性
tag.get_attribute('src')
获取文本内容
tag.text
获取标签ID,位置,名称,大小
print(tag.id) print(tag.location) print(tag.tag_name) print(tag.size)
模拟浏览器前进后退
browser.back()
browser.forward()

cookies管理
browser.get_cookies() # 获取cookie browser.add_cookie({'k1':'xxx','k2':'yyy'}) # 设置cookie
运行js
from selenium import webdriver import time bro=webdriver.Chrome() bro.get("http://www.taobao.com") bro.execute_script('window.scrollTo(0,200)') # 鼠标滚轮移动 time.sleep(5)

选项卡管理
import time from selenium import webdriver browser=webdriver.Chrome() browser.get('https://www.baidu.com') browser.execute_script('window.open()') print(browser.window_handles) # 获取所有的选项卡 browser.switch_to_window(browser.window_handles[1]) browser.get('https://www.taobao.com') time.sleep(3) browser.switch_to_window(browser.window_handles[0]) browser.get('https://www.sina.com.cn') browser.close()

动作链
方式一
from selenium import webdriver from selenium.webdriver import ActionChains import time driver = webdriver.Chrome() driver.get('http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable') driver.switch_to.frame('iframeResult') # 必须要指定iframe标签 sourse = driver.find_element_by_id('draggable') target = driver.find_element_by_id('droppable') actions = ActionChains(driver) # 拿到动作链对象 actions.drag_and_drop(sourse, target) # 把动作放到动作链中,准备串行执行 actions.perform()
基于同一个动作链串行执行(速度太快不合理)

方式二
from selenium import webdriver from selenium.webdriver import ActionChains import time driver = webdriver.Chrome() driver.get('http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable') driver.switch_to.frame('iframeResult') # 必须要指定iframe标签 sourse = driver.find_element_by_id('draggable') target = driver.find_element_by_id('droppable') actions = ActionChains(driver) actions.click_and_hold(sourse) distance = target.location['x'] - sourse.location['x'] track = 0 while track < distance: actions.move_by_offset(xoffset=2, yoffset=0).perform() track += 5 time.sleep(0.5) actions.release() driver.close()
不同的动作链,每次移动的位移都不同

有时候一个页面上还会叠加其他完整的html页面 该页面一般都是iframe标签 内部含有完整的html文档结构 # 在查找该标签内部的标签时需要指定一个参数 driver.switch_to.frame('iframeResult')
滑动验证码
# 针对滑动验证码也是可以通过selenuim自动完成的 # 滑动验证码很多时候不推荐使用程序破解,太过繁琐 很多时候还不如自己亲自手动滑动来的方便 # 滑动验证码在拖动的时候速度不能太快,内部有监测机制 速度过快一步到位会被认为是爬虫程序
无界面操作
from selenium.webdriver.chrome.options import Options from selenium import webdriver chrome_options = Options() chrome_options.add_argument('--headless') chrome_options.add_argument('--disable-gpu') driver = webdriver.Chrome(chrome_options=chrome_options) driver.get('https://www.baidu.com') print(driver.page_source)

# 很多程序是可以分辨出来当前浏览器是否被selenuim操作 我们可以在代码中添加如下配置即可避免被识别 from selenium.webdriver import ChromeOptions option = ChromeOptions() option.add_experimental_option('excludeSwitchers',['enable-automation']) driver = webdriver.Chrome(options=option)
url = 'https://account.cnblogs.com/signin?returnUrl=https%3A%2F%2Fwww.cnblogs.com%2F' driver = webdriver.Chrome() driver.get(url=url) time.sleep(30) # 预留时间让用户输入用户名和密码 driver.refresh() # 刷新页面 c = driver.get_cookies() # 获取登录成功之后服务端发返回的cookie数据 print(c) with open('xxx.txt', 'w') as f: json.dump(c, f)
第二步将获取的cookie数据写入文本文件内
cookies = {} with open('xxx.txt', 'r') as f: di = json.load(f)
第三步获取cookie中的name和value,转化成requests可以使用的形式
for cookie in di: cookies[cookie['name']] = cookie['value']
第四步使用该cookie完成请求
response = requests.get(url='https://i-beta.cnblogs.com/api/user', cookies=cookies) response.encoding = response.apparent_encoding print(response.text)
完整代码
import requests from selenium import webdriver import time import json # 使用selenium打开网址,然后让用户完成手工登录,再获取cookie # url = 'https://account.cnblogs.com/signin?returnUrl=https%3A%2F%2Fwww.cnblogs.com%2F' # driver = webdriver.Chrome() # driver.get(url=url) # time.sleep(30) # 预留时间让用户输入用户名和密码 # driver.refresh() # 刷新页面 # c = driver.get_cookies() # 获取登录成功之后服务端发返回的cookie数据 # print(c) # with open('xxx.txt', 'w') as f: # json.dump(c, f) cookies = {} with open('xxx.txt', 'r') as f: di = json.load(f) # 获取cookie中的name和value,转化成requests可以使用的形式 for cookie in di: cookies[cookie['name']] = cookie['value'] # # 使用该cookie完成请求 # response = requests.get(url='https://i-beta.cnblogs.com/api/user', cookies=cookies) # response.encoding = response.apparent_encoding # print(response.text)
思路1: 完全使用代码破解
图像识别技术 软件:Tesseract-ocr 模块:pytesseract

思路2: 打码平台
花钱买第三方服务
先使用代码识别如果不想其实还有一帮员工肉眼识别
思路3: 自己人工智能识别
思路
1.寻找任意一个视频地址 2.分析页面在network中发现该地址发送请求后有两个视频和音频文件比较可疑
研究下来发现b站的视频是一分为二的,分为视频和音频 3.然后用requests模块模拟即可,打开文件不停的发送请求加载数据写入即可
思路
1.小说详情页面鼠标左右键全部禁用 但是支持按F12调出控制台 2.小说文字不是直接加载 查找相关二次请求 3.在请求中发现可疑数据 https://www.hongshu.com/bookajax.do content:加密数据 other:加密数据 bid: 3052 jid: 3317 cid: 98805 4.文字内容的解密过程发送在浏览器本地 涉及到数据解密肯定需要写js代码 并且一般都会出现关键字decrypt 通过浏览器查找相应的js代码 文字主要内容的界面 utf8to16(hs_decrypt(base64decode(data.content), key)) 解密之后仍然存在数据缺失的情况 utf8to16(hs_decrypt(base64decode(data.other), key)) 解密之后是一段js代码 # 怀疑缺失的数据与解析出来js代码有很大的关系 5.自己新建一个html文件 将content内部拷贝只body内 将js代码引入到该html文件夹




浙公网安备 33010602011771号