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

selenium等待元素加载

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

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

python 复制代码
# 找某个标签,如果找不到,最多等待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)')

切换选项卡

python 复制代码
from selenium import webdriver
import time

bro = 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
python 复制代码
import time

from 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
python 复制代码
import time

from 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()

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点赞
python 复制代码
# 访问首页,解析出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)
相关推荐
2401_836121607 分钟前
更优雅的测试:Pytest框架入门
jvm·数据库·python
诸神缄默不语9 分钟前
如何用Python调用智谱清言GLM系API实现智能问答
python·ai·大模型·nlp·chatglm·glm·智谱清言
青果全球http10 分钟前
多线程爬虫使用代理IP指南
爬虫·网络协议·tcp/ip
Clarice__12 分钟前
VScode上的python使用教程
vscode·python·conda
程序员三藏15 分钟前
自动化测试步骤详解
自动化测试·软件测试·python·测试工具·程序人生·职场和发展·测试用例
无垠的广袤16 分钟前
【Arduino UNO Q】 边缘 AI 视觉部署方案:二维码识别
linux·人工智能·python·opencv
喵手20 分钟前
Python爬虫实战:使用高德地图开放平台API获取餐饮POI数据(店名、坐标、评分)数据采集与地理可视化(附CSV导出 + SQLite持久化存储)!
爬虫·python·sqlite·爬虫实战·零基础python爬虫教学·高德地图开放api·获取餐饮poi数据
ziqi52222 分钟前
第二十二天笔记
前端·chrome·笔记
70asunflower25 分钟前
Python网络内容下载框架教程
开发语言·网络·python
datascome27 分钟前
文章自动采集发布Zblog网站技巧
爬虫·数据采集·zblog·网站运营·网页数据抓取