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

相关文章

Python调用Orator ORM进行数据库操作

《Python调用OratorORM进行数据库操作》OratorORM是一个功能丰富且灵活的PythonORM库,旨在简化数据库操作,它支持多种数据库并提供了简洁且直观的API,下面我们就... 目录Orator ORM 主要特点安装使用示例总结Orator ORM 是一个功能丰富且灵活的 python O

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

前端原生js实现拖拽排课效果实例

《前端原生js实现拖拽排课效果实例》:本文主要介绍如何实现一个简单的课程表拖拽功能,通过HTML、CSS和JavaScript的配合,我们实现了课程项的拖拽、放置和显示功能,文中通过实例代码介绍的... 目录1. 效果展示2. 效果分析2.1 关键点2.2 实现方法3. 代码实现3.1 html部分3.2

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

在MySQL执行UPDATE语句时遇到的错误1175的解决方案

《在MySQL执行UPDATE语句时遇到的错误1175的解决方案》MySQL安全更新模式(SafeUpdateMode)限制了UPDATE和DELETE操作,要求使用WHERE子句时必须基于主键或索引... mysql 中遇到的 Error Code: 1175 是由于启用了 安全更新模式(Safe Upd

关于Spring @Bean 相同加载顺序不同结果不同的问题记录

《关于Spring@Bean相同加载顺序不同结果不同的问题记录》本文主要探讨了在Spring5.1.3.RELEASE版本下,当有两个全注解类定义相同类型的Bean时,由于加载顺序不同,最终生成的... 目录问题说明测试输出1测试输出2@Bean注解的BeanDefiChina编程nition加入时机总结问题说明

JS 实现复制到剪贴板的几种方式小结

《JS实现复制到剪贴板的几种方式小结》本文主要介绍了JS实现复制到剪贴板的几种方式小结,包括ClipboardAPI和document.execCommand这两种方法,具有一定的参考价值,感兴趣的... 目录一、Clipboard API相关属性方法二、document.execCommand优点:缺点:

轻松上手MYSQL之JSON函数实现高效数据查询与操作

《轻松上手MYSQL之JSON函数实现高效数据查询与操作》:本文主要介绍轻松上手MYSQL之JSON函数实现高效数据查询与操作的相关资料,MySQL提供了多个JSON函数,用于处理和查询JSON数... 目录一、jsON_EXTRACT 提取指定数据二、JSON_UNQUOTE 取消双引号三、JSON_KE