selenium模块基本使用操作及复杂爬虫项目

首先导入模块:

from selenium import webdriver


获取属性

tag.get_attribute('src')


获取标签ID,位置,名称,大小

print(tag.id)
print(tag.location)
print(tag.tag_name)
print(tag.size)


模拟浏览器前进后退

from selenium import webdriver
import time
bro=webdriver.Chrome()

bro.get('https://www.taobao.com/')
time.sleep(3)
bro.forward() #往前进页面
time.sleep(1)
bro.back()#往后退页面
time.sleep(1)


cookies管理

from selenium import webdriver
import time
bro=webdriver.Chrome()

bro.get('https://www.baidu.com/')
print(bro.get_cookies())
time.sleep(3)


控制滚轮移动

from selenium import webdriver
import time
bro=webdriver.Chrome()
bro.get("http://www.baidu.com")
bro.execute_script('window.scrollTo(0,200)') # 鼠标滚轮移动xt坐标系值
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()

动作链

页面嵌套页面

# 动作链(页面上嵌套页面>>>iframe)
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()
# 方式二:不同的动作链,每次移动的位移都不同
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()

嵌套标签 iframe

关于iframe:

经常会碰到页面上会叠加一个页面,这个叠加的页面一般都是iframe标签,内部也有完整的html文档结构


无界面操作即不显示浏览器 实际后台运行

from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
bro = webdriver.Chrome(chrome_options=chrome_options)
bro.get('https://www.baidu.com')

针对selenuim防爬 其实就是为了伪装成正常的浏览器步骤访问网站不被程序分辨

from selenium.webdriver import ChromeOptions
option = ChromeOptions()
option.add_experimental_option('excludeSwitchers',['enable-automation'])
bro = webdriver.Chrome(options=option)

cookie登录

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)
"""
seleuinm拿cookie
requests拿cookie去模拟爬取数据
"""

图片验证码

思路1:  完全使用代码破解  但是会有识别误差
    图像识别技术
        软件:Tesseract-ocr 
        模块:pytesseract
思路2:  打码平台 
         花钱买第三方服务
         先使用代码识别如果不对 
         后台其实还有一帮员工肉眼识别
思路3:  自己人工智能识别

爬取b站视频案例(了解思路)

"""
先爬取视频的画面 再爬取视频的音频部分
总共分为两个爬取内容
这其实也是一种防爬手段
需要安装ffmpeg来进行视频拼接

"""

爬取红薯网小说案例(思路)https://www.hongshu.com/content/3052/3317-98805.html(地狱级难度)

1.首先 左右键无法使用 只能使用fn键+f12来调出network

2.文字不是直接加载,查找相关二次请求数据

 

 

 检查五个中的内容

 

 

 

 其中第二个有可疑的加密数据

以及在网址内部的数字

 

 

4.文字内容的解密过程发送在浏览器本地

涉及到数据解密肯定需要写js代码 并且一般都会出现关键字decrypt
通过浏览器查找相应的js代码
文字主要内容的界面
utf8to16(hs_decrypt(base64decode(data.content), key))
解密之后仍然存在数据缺失的情况
utf8to16(hs_decrypt(base64decode(data.other), key))
解密之后是一段js代码

 5.自己新建一个html文件

将content内部拷贝只body内
将js代码引入到该html文件夹

posted @ 2021-09-29 21:54  查无此人cxc  阅读(168)  评论(0)    收藏  举报