爬虫进阶-反爬破解5(selenium的优势和点击操作+chrome的远程调试能力+通过Chrome隔离实现一台电脑登陆多个账号)

news/2024/7/19 11:56:38 标签: 爬虫

目录

一、selenium的优势和点击操作

二、chrome的远程调试能力

三、通过Chrome隔离实现一台电脑登陆多个账号


一、selenium的优势和点击操作

1.环境搭建

工具:Chrome浏览器+chromedriver+selenium

win用户:chromedriver.exe放在python.exe旁边

MacOS用户:驱动路径是/user/local/bin/chromedriver

Linux大佬自行安装

2.Selenium优势

Selenium直接操作浏览器,不需要分析请求和加密数据

程序可以读取网页源码,分析并提取内容

程序可以直接和网页元素进行交互,例如点击

from selenium import webdriver
from time import sleep

url = 'http://shanzhi.spbeen.com/'
cb = webdriver.Chrome()
cb.get(url)
word_search_input = cb.find_element_by_xpath('.//input[@name="word"]')
word_search_input.send_keys("开发")
sleep(2)
search_button = cb.find_element_by_xpath('.//form[@action="/search/"]/button')
search_button.click() 
sleep(3)
num = 1
while num <= 5:
    next_element  = cb.find_element_by_xpath('.//div[@class="col-4"]/a[1]')
    next_element.click()
    sleep(3)
    num += 1
sleep(5)
cb.quit()

3.总结:

使用selenium,可以降低开发难度,提高开发效率

selenium可以直接操作页面元素,例如点击

selenium会降低程序运行速度,因为会主动加载更多的内容

二、chrome的远程调试能力

命令参数:--remote-debugging-port=9221

1.selenium端口调试的优势:

直接启动的浏览器,无selenium的特征,更安全

浏览器和selenium程序独立存在,不干扰

selenium依然可以控制chrome,程序上没有任何的修改

2.实践操作:selenium远程调试

Chrome开启远程调试端口

(1)windows用户

新建一个Chrome的快捷方式,然后鼠标右键,打开属性

(2)Mac (3)Linux

书写代码:

from selenium import webdriver

options = webdriver.ChromeOptions()
options.add_experimental_option("debuggerAddress","127.0.0.1:9221")
cb = webdriver.Chrome(options=options)

print(cb.title)

cb.get("https://www.zhihu.com")

print(cb.title)

cb.quit()

总结:

开启Chrome的远程调试端口,独立运行更自由

Selenium代码启动后,直接接管Chrome,操作没区别

注意Chrome网页环境参数问题,操作前先处理环境

三、通过Chrome隔离实现一台电脑登陆多个账号

1.启动参数介绍

--remote-debugging-port=9221

--user-data-dir=='C:/path_to/data_dir'

--headless

--window-size=1336,768

--disable-infobars

--incognito 无痕模式

2.正常模式和无痕模式

正常模式,数据正常保存并可以二次读取

无痕模式也会将数据存储在本地,不会二次加载

Selenium可以手动指定数据存储目录,用于多账号的数据存储

3.实践操作:Chrome数据存储隔离操作

from selenium import webdriver
from time import sleep
import os

path = '/Users/buladou/chrome_temp_dir'

user = [
    ['demo123','demo123'],
    ['demo1234','demo1234'],
    ['test123','test123'],
    ['test1234','test1234']
]

for user in users:
    options = webdriver.ChromeOptions()
    user_path = os.path.join(path, user[0])
    if not os.path.exists(user_path):
        os.makedirs(user_path)
    if 'demo' in user[0]:
        options.add_argument("--user-data-dir={}".format(user_path))

    else:
        options.add_argument("--incognito")
    options.add_argument("--user-data-dir={}".format(user_path))
    cb = webdriver.Chrome(options=options)
    cb.get('http://shanzhi.spbeen.com/login/')
    username = cb.find_element_by_xpath('.//input[@name="username"]')
    username.send_keys(user[0])
    password =cb.find_element_by_xpath('.//input[@id="MemberPassword"]')
    password.send_keys(user[1])
sleep(60*60)

总结:

需要隐私操作,使用无痕模式启动浏览器,更保险

指定目录启动selenium,数据可以进行二次加载,读取记录

启动系统浏览器,有一个默认的存储地址,而且是固定的


http://www.niftyadmin.cn/n/4995721.html

相关文章

加快 MySQL 数据迁移

目录 一、先导 1. 自建目标实例 2. 配置目标主从 二、源导出 1. 生成查询用户权限的SQL语句 2. 生成权限的SQL语句 3. 生成创建非主键索引的SQL语句 4. 导出源库结构 5. 导出源库数据 三、目标导入 1. 目标实例设置 2. 创建用户与权限 3. 处理结构导出文件 4. 导…

Rust的模块化

Rust的模块化要从Rust的入口文件谈起。 Rust的程序的入口文件有两个 如果程序类型是可执行应用&#xff0c;入口文件是main.rs&#xff1b;如果程序类型是库&#xff0c;入口文件是lib.rs&#xff1b; 入口文件中&#xff0c;必须声明本地模块&#xff0c;否则编译器在编译过…

mybatis源码学习-1-调试环境

写在前面,这里会有很多借鉴的内容,有以下三个原因 本博客只是作为本人学习记录并用以分享,并不是专业的技术型博客笔者是位刚刚开始尝试阅读源码的人,对源码的阅读流程乃至整体架构并不熟悉,观看他人博客可以帮助我快速入门如果只是笔者自己观看,难免会有很多弄不懂乃至理解错误…

PCFE-GNNs

计算数据预训练后再用实验数据微调&#xff0c;预测 logD7.4&#xff0c;代码&#xff1a;PCFE-GNNs&#xff0c;原文&#xff1a;Improved GNNs for Log D7.4 Prediction by Transferring Knowledge from Low-Fidelity Data。模型框架如下&#xff1a; 文章目录 1.pretrain…

【Java核心知识】线程池相关知识

文章目录 线程池四种常见的线程池线程池标准创建方式实现原理拒绝策略线程回收参考链接 线程池 四种常见的线程池 newSingleThreadExecutor 创建单线程化线程池&#xff1a;只有一个线程&#xff0c;缺点是阻塞队列没有限制&#xff0c;容易OOMnewFixedThreadPool 创建固定数…

springmvc的转发和重定向的案例演示 到底什么是转发和重定向两者有什么区别?

案例演示 在Spring MVC中&#xff0c;你可以使用ModelAndView或直接返回String来实现转发和重定向。以下是转发和重定向的示例&#xff1a; ### 1. 使用ModelAndView #### 转发&#xff08;Forward&#xff09; java RequestMapping("/forwardDemo") public Model…

uni-app之android项目云打包

1&#xff0c;项目根目录&#xff0c;找到mainfest.json&#xff0c;如果appid是空的&#xff0c;需要生成一个appid 2&#xff0c;点击重新获取appid&#xff0c;这个时候需要登录&#xff0c;那就输入账号密码登录下 3&#xff0c;登陆后可以看到获取appid成功 4&#xff0c;…

Docker 相关操作,及其一键安装Docker脚本

一、模拟CentOS 7.5上安装Docker&#xff1a; 创建一个CentOS 7.5的虚拟机或使用其他方式准备一个CentOS 7.5的环境。 在CentOS 7.5上执行以下命令&#xff0c;以安装Docker的依赖项&#xff1a; sudo yum install -y yum-utils device-mapper-persistent-data lvm2 添加Doc…