selenium等待元素加载、元素操作、执行js、切换选项卡、登录cnblogs(chrome)、抽屉半自动点赞

本文主要是介绍selenium等待元素加载、元素操作、执行js、切换选项卡、登录cnblogs(chrome)、抽屉半自动点赞,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

selenium等待元素加载

代码操作非常快 ⇢ \dashrightarrow 有的标签还没加载 ⇢ \dashrightarrow 找就找不到 ⇢ \dashrightarrow 就会报错

设置等待:显示等待,隐士等待

# 找某个标签,如果找不到,最多等待10s
bro.implicitly_wait(10)

selenium元素操作

  1. 点击操作:click()
  2. 写文字:send_keys("内容")
  3. 清空文字:clear()

执行js

在使用selenium操作浏览器的时候,可以自己写js执行,会用这东西做什么?

  • 创建新的选项卡
  • 打印出一些变量(属于当前爬取的页面中的变量)
  • 获取当前登录的cookie
  • 滑动屏幕
  1. 基本使用:bro.execute_script('alert("美女")')
  2. 打印出一些变量:res=bro.execute_script('console.log(urlMap)')
  3. 新建选项卡:bro.execute_script('open()')
  4. 滑动屏幕(滑倒底部):bro.execute_script('scrollTo(0,document.documentElement.scrollHeight)')
  5. 获取当前访问地址:
    • bro.execute_script('alert(location)')
    • 更改当前访问地址:bro.execute_script('location="http://www.baidu.com"')
  6. 打印cookie:bro.execute_script('alert(document.cookie)')

切换选项卡

from selenium import webdriver
import timebro = webdriver.Firefox()
bro.get('https://www.cnblogs.com/liuqingzheng/p/16005896.html')
bro.implicitly_wait(10)# 开启选项卡
bro.execute_script('window.open()')# 切换到某个选项卡
bro.switch_to.window(bro.window_handles[1])
bro.get('https://www.baidu.com/')
time.sleep(2)
bro.get('http://www.taobao.com')
time.sleep(2)# 回退
bro.back()
time.sleep(2)# 前进
bro.forward()
time.sleep(2)# 关闭选项卡
bro.close()# 关闭页面
bro.quit()bro.close()

登录cnblogs(chrome)

以后要爬取的数据,要登录后才能看到

  • 如果使用selenium,速度慢 ⇢ \dashrightarrow 不能开启多线程 ⇢ \dashrightarrow 速度不会太快
  • 如果使用requests发送请求,登录不好登录,自动登录不进去 ⇢ \dashrightarrow 拿不到cookie
  • 使用selenium登录 ⇢ \dashrightarrow 拿到cookie ⇢ \dashrightarrow 换到别的机器,使用这个cookie,依然是登录状态
登录获取cookies
import timefrom selenium import webdriver
from selenium.webdriver.chrome.options import Options
import json
from selenium.webdriver.common.by import By
# 去掉自动化软件控制的检测
options = Options()
options.add_argument("--disable-blink-features=AutomationControlled")  
bro = webdriver.Chrome(options=options)bro.get('https://www.cnblogs.com/')
bro.implicitly_wait(10)
bro.maximize_window()
login_btn = bro.find_element(By.LINK_TEXT, '登录')
login_btn.click()time.sleep(2)# 找到用户名和密码输入框
username = bro.find_element(By.CSS_SELECTOR, '#mat-input-0')
password = bro.find_element(By.ID, 'mat-input-1')submit_btn = bro.find_element(By.CSS_SELECTOR,'body > app-root > app-sign-in-layout > div > div > app-sign-in > app-content-container > div > div > div > form > div > button')
# 验证码
code=bro.find_element(By.ID,'Shape3')
time.sleep(1)username.send_keys('@qq.com')
time.sleep(1)
password.send_keys('#')
time.sleep(1)
submit_btn.click()  # 一种情况直接登录成功   一种情况会弹出验证码
code.click()
time.sleep(10)# 让程序先停在这---》手动操作浏览器---》把验证码搞好---》程序再继续往下走
# 到现在,是登录成功的状态
# 取出cookie存起来
cookies = bro.get_cookies()
with open('cnblogs.json', 'w', encoding='utf-8') as f:json.dump(cookies, f)time.sleep(2)
bro.close()
换到别的机器,使用这个cookie
import timefrom selenium import webdriver
from selenium.webdriver.chrome.options import Options
import json
from selenium.webdriver.common.by import Byoptions = Options()
options.add_argument("--disable-blink-features=AutomationControlled") 
bro = webdriver.Chrome(options=options)bro.get('https://www.cnblogs.com/')
bro.implicitly_wait(10)
bro.maximize_window()time.sleep(5)
# 取出cookie--》写入到浏览器中---》刷新浏览器---》登录状态
with open('cnblogs.json', 'r') as f:cookies = json.load(f)
# 写到浏览器中
for item in cookies:bro.add_cookie(item) # 如果是没登录的cookie,往里写会报错# 刷新浏览器
bro.refresh()time.sleep(5)
bro.close()

抽屉半自动点赞

使用selenium登录 ⇢ \dashrightarrow 拿到cookie
点赞 使用requests 用cookie点赞

使用requests点赞
# 访问首页,解析出id号
import requests
from bs4 import BeautifulSoup#### 携带cookie访问#####
session = requests.Session()
cookie = {}  # 本地取出来,写入
with open('chouti.json', 'r') as f:cookie_list = json.load(f)
##### selenium的cookie和requests的cookie格式不一样,要转换   {key:value,key:value}
for item in cookie_list:cookie[item['name']] = item['value']
header={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36'}
res = session.get('https://dig.chouti.com/', cookies=cookie,headers=header)
soup = BeautifulSoup(res.text, 'html.parser')print(res.text)divs = soup.find_all(name='div', class_='link-item')
for div in divs:article_id = div.attrs.get('data-id')data = {'linkId': article_id}res1 = session.post('https://dig.chouti.com/link/vote', data=data,headers=header)print(res1.text)

这篇关于selenium等待元素加载、元素操作、执行js、切换选项卡、登录cnblogs(chrome)、抽屉半自动点赞的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/382242

相关文章

Linux kill正在执行的后台任务 kill进程组使用详解

《Linuxkill正在执行的后台任务kill进程组使用详解》文章介绍了两个脚本的功能和区别,以及执行这些脚本时遇到的进程管理问题,通过查看进程树、使用`kill`命令和`lsof`命令,分析了子... 目录零. 用到的命令一. 待执行的脚本二. 执行含子进程的脚本,并kill2.1 进程查看2.2 遇到的

MyBatis延迟加载与多级缓存全解析

《MyBatis延迟加载与多级缓存全解析》文章介绍MyBatis的延迟加载与多级缓存机制,延迟加载按需加载关联数据提升性能,一级缓存会话级默认开启,二级缓存工厂级支持跨会话共享,增删改操作会清空对应缓... 目录MyBATis延迟加载策略一对多示例一对多示例MyBatis框架的缓存一级缓存二级缓存MyBat

java中ssh2执行多条命令的四种方法

《java中ssh2执行多条命令的四种方法》本文主要介绍了java中ssh2执行多条命令的四种方法,包括分号分隔、管道分隔、EOF块、脚本调用,可确保环境配置生效,提升操作效率,具有一定的参考价值,感... 目录1 使用分号隔开2 使用管道符号隔开3 使用写EOF的方式4 使用脚本的方式大家平时有没有遇到自

使用Java填充Word模板的操作指南

《使用Java填充Word模板的操作指南》本文介绍了Java填充Word模板的实现方法,包括文本、列表和复选框的填充,首先通过Word域功能设置模板变量,然后使用poi-tl、aspose-words... 目录前言一、设置word模板普通字段列表字段复选框二、代码1. 引入POM2. 模板放入项目3.代码

mybatis直接执行完整sql及踩坑解决

《mybatis直接执行完整sql及踩坑解决》MyBatis可通过select标签执行动态SQL,DQL用ListLinkedHashMap接收结果,DML用int处理,注意防御SQL注入,优先使用#... 目录myBATiFBNZQs直接执行完整sql及踩坑select语句采用count、insert、u

利用Python操作Word文档页码的实际应用

《利用Python操作Word文档页码的实际应用》在撰写长篇文档时,经常需要将文档分成多个节,每个节都需要单独的页码,下面:本文主要介绍利用Python操作Word文档页码的相关资料,文中通过代码... 目录需求:文档详情:要求:该程序的功能是:总结需求:一次性处理24个文档的页码。文档详情:1、每个

Python内存管理机制之垃圾回收与引用计数操作全过程

《Python内存管理机制之垃圾回收与引用计数操作全过程》SQLAlchemy是Python中最流行的ORM(对象关系映射)框架之一,它提供了高效且灵活的数据库操作方式,本文将介绍如何使用SQLAlc... 目录安装核心概念连接数据库定义数据模型创建数据库表基本CRUD操作创建数据读取数据更新数据删除数据查

Go语言中json操作的实现

《Go语言中json操作的实现》本文主要介绍了Go语言中的json操作的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录 一、jsOChina编程N 与 Go 类型对应关系️ 二、基本操作:编码与解码 三、结构体标签(Struc

JS纯前端实现浏览器语音播报、朗读功能的完整代码

《JS纯前端实现浏览器语音播报、朗读功能的完整代码》在现代互联网的发展中,语音技术正逐渐成为改变用户体验的重要一环,下面:本文主要介绍JS纯前端实现浏览器语音播报、朗读功能的相关资料,文中通过代码... 目录一、朗读单条文本:① 语音自选参数,按钮控制语音:② 效果图:二、朗读多条文本:① 语音有默认值:②

在Node.js中使用.env文件管理环境变量的全过程

《在Node.js中使用.env文件管理环境变量的全过程》Node.js应用程序通常依赖于环境变量来管理敏感信息或配置设置,.env文件已经成为一种流行的本地管理这些变量的方法,本文将探讨.env文件... 目录引言为什么使php用 .env 文件 ?如何在 Node.js 中使用 .env 文件最佳实践引