目录
1.查看自己电脑Chrome浏览器版本
点击谷歌浏览器主页右上角三个点——>点击帮助——>关于Google Chrome(如下图:)

查看结果如下:

1.下载谷歌浏览器驱动器Chromedriver地址:
2.驱动器下载版本需大于等于浏览器版本。
本机浏览器版本:107.0.5304.107
所以选择如下图版本下载:

3.点击下载

4.解压并放到Python项目下:

如下图:

先点击terminal进入终端,输入pip install xxx(库的名称)

注:selenium需要指定版本3.141.0
命令:pip install selenium==3.141.0
后面在获取登录验证码元素时需使用find_element_by_css_selector的方法获取验证码元素。
若使用find_element方法项目最后一步会报错:如图

# 时间模块
import time
# selenium的动作链模块
from selenium.webdriver import ActionChains
# 导入超级鹰打码平台模块(choajiying.py文件的Chaojiying_Client类)
from chaojiying import Chaojiying_Client
# 驱动器模块
from selenium import webdriver
from selenium.webdriver.common.by import By
注:chaojiying是打码平台提供的一个python文件后面会讲到。
# B站的网页地址
url = 'https://www.bilibili.com/'
# 创建驱动器对象
driver = webdriver.Chrome
# driver = webdriver.Chrome(executable_path='驱动器路径')
# 传入URL地址
driver.get(url)
注:若驱动器没在项目路径下,需手动指定驱动器路径。
1.打开网页版b站:哔哩哔哩 (゜-゜)つロ 干杯~-bilibili
2.按F12(或右键点击检查)打开 开发者工具
3.定位元素
有爬虫基础的可以 自己写xpath、css等元素定位方法。
(1)点击登录按钮弹出登录框
点击开发者工具右上角的箭头(标签选择器)——>再点击登录按钮——>右键copy被选中元素的selector路径——直接粘贴到代码里——>调用click()方法——延迟3秒等待加载(如下图、代码)

# 点击登录按钮,获取登录页面
driver.find_element(By.CSS_SELECTOR,'#i_cecream > div.bili-feed4 > div.bili-header.large-header > div.bili-header__bar > ul.right-entry > li:nth-child(1) > li > div.right-entry__outside.go-login-btn > div').click()
time.sleep(3)
注:#i_cecream > div.bili-feed4 > div.bili-header.large-header > div.bili-header__bar > ul.right-entry > li:nth-child(1) > li > div.right-entry__outside.go-login-btn > div 即为selector路径
(2)输入账号和密码
点击开发者工具右上角的箭头(标签选择器)——>再点击账号、密码输入框——>分别右键copy被选中元素的selector路径——直接粘贴到代码里——>调用send_keys()方法——延迟1到2秒等待加载(如下图、代码)

# 输入账号,密码
driver.find_element(By.CSS_SELECTOR,'body > div.bili-mini-mask > div > div.bili-mini-content > div.bili-mini-login-wrapper > div.bili-mini-password-wrapper > div.bili-mini-account > input[type=text]').send_keys('账号')
time.sleep(1)
driver.find_element(By.CSS_SELECTOR,'body > div.bili-mini-mask > div > div.bili-mini-content > div.bili-mini-login-wrapper > div.bili-mini-password-wrapper > div.bili-mini-password > div.left > input[type=password]').send_keys('密码')
time.sleep(2)
(3)点击确定登录按钮
点击开发者工具右上角的箭头(标签选择器)——>再点击登录按钮——>右键copy被选中元素的selector路径——直接粘贴到代码里——>调用click()方法——延迟2秒等待加载(如下图、代码)

# 点击确定登录按钮
driver.find_element(By.CSS_SELECTOR,'body > div.bili-mini-mask > div > div.bili-mini-content > div.bili-mini-login-wrapper > div.bili-mini-login-register-wrapper > div.universal-btn.login-btn').click()
time.sleep(2)
点击开发者工具右上角的箭头(标签选择器)——>再点击验证码框——>右键copy被选中元素的selector路径——直接粘贴到代码里——>调用screenshot()方法进行截图并命名为yzm.png保存到该项目目录下(如下图、代码)

# 获取验证码的元素,并进行截图。
image = driver.find_element(By.CSS_SELECTOR,'body > div.geetest_panel.geetest_wind > div.geetest_panel_box.geetest_no_logo.geetest_panelshowclick > div.geetest_panel_next > div')
image.screenshot('yzm.png'))

打码平台的作用:获取验证码截图需要点击的汉字的坐标位置。
1.注册超级鹰账号
地址:超级鹰验证码识别-专业的验证码云端识别服务,让验证码识别更快速、更准确、更强大
2.获取题分(1元=1000题分)
3.下载python开发文档
点击开发文档——>选择python语言——>点击这里下载——>解压并将chaojiying.py文件放到python项目下


4.创建软件ID
进入用户中心——>点击软件ID——>再点击生成一个软件ID——>输入任意的软件名称——>点击提交会生成一个如下图的软件ID

5.将chaojiying.py文件导入到项目文件中(如下代码)
# 导入超级鹰打码平台模块(choajiying.py文件的Chaojiying_Client类)
from chaojiying import Chaojiying_Client
6.导入超级鹰类
并输入账号,密码,软件ID,以二进制的方式读取验证码图片,获取验证码的坐标字典,并取出坐标值。
# 导入超级鹰,并输入账号,密码,软件ID
chaojiying = Chaojiying_Client('账号', '密码', '软件ID') # 用户中心>>软件ID 生成一个替换 96001
im = open('yzm.png', 'rb').read() # 以二进制的方式读取验证码
result = chaojiying.PostPic(im, 9004)['pic_str'] #获取验证码的坐标字典,并取出坐标值

pic_str为返回的坐标值并通过键取出值。
7.点击验证码
对返回的验证码坐标值进行处理,得到每个验证码的x轴和y轴。
创建动作链对象通过move_to_element_with_offset方法依次点击验证码。
for index in result.split('|'): #以"|"进行分割,得到一个列表,并循环出每一个字的坐标
x = index.split(',')[0] # 得到x轴的坐标
y = index.split(',')[1] # 得到y轴的坐标
action = ActionChains(driver) #创建动作链对象
action.move_to_element_with_offset(image,int(x),int(y)).click().perform()
# image:验证码的元素框;x:验证码的横轴;y:验证码的纵轴
time.sleep(1)
8.点击确认完成登录
time.sleep(1) # 加载一秒后在进行点击
driver.find_element(By.CSS_SELECTOR,'body > div.geetest_panel.geetest_wind > div.geetest_panel_box.geetest_panelshowclick > div.geetest_panel_next > div > div > div.geetest_panel > a > div').click()

# _*_ coding : utf-8 _*_
# 时间模块
import time
# selenium的动作链模块
from selenium.webdriver import ActionChains
# 导入超级鹰打码平台模块(choajiying.py文件的Chaojiying_Client类)
from chaojiying import Chaojiying_Client
# 驱动器模块
from selenium import webdriver
from selenium.webdriver.common.by import By
# B站的网页地址
url = 'https://www.bilibili.com/'
driver = webdriver.Chrome() # 若驱动器没在
driver.get(url)
# 点击登录按钮,获取登录页面
driver.find_element(By.CSS_SELECTOR,'#i_cecream > div.bili-feed4 > div.bili-header.large-header > div.bili-header__bar > ul.right-entry > li:nth-child(1) > li > div.right-entry__outside.go-login-btn > div').click()
time.sleep(3)
# 输入账号,密码
driver.find_element(By.CSS_SELECTOR,'body > div.bili-mini-mask > div > div.bili-mini-content > div.bili-mini-login-wrapper > div.bili-mini-password-wrapper > div.bili-mini-account > input[type=text]').send_keys('B站账号')
time.sleep(1)
driver.find_element(By.CSS_SELECTOR,'body > div.bili-mini-mask > div > div.bili-mini-content > div.bili-mini-login-wrapper > div.bili-mini-password-wrapper > div.bili-mini-password > div.left > input[type=password]').send_keys('密码')
time.sleep(2)
# 点击确定登录按钮
driver.find_element(By.CSS_SELECTOR,'body > div.bili-mini-mask > div > div.bili-mini-content > div.bili-mini-login-wrapper > div.bili-mini-login-register-wrapper > div.universal-btn.login-btn').click()
time.sleep(2)
# 获取验证码的元素,并进行截图。
image = driver.find_element(By.CSS_SELECTOR,'body > div.geetest_panel.geetest_wind > div.geetest_panel_box.geetest_panelshowclick > div.geetest_panel_next > div')
image.screenshot('yzm.png')
# 导入超级鹰,并输入账号,密码,软件ID
chaojiying = Chaojiying_Client('超级鹰账号', '密码', '软件ID') # 用户中心>>软件ID 生成一个替换 96001
im = open('yzm.png', 'rb').read() # 以二进制的方式读取验证码
result = chaojiying.PostPic(im, 9004)['pic_str'] #获取验证码的坐标字典,并取出坐标值
for index in result.split('|'): #以"|"进行分割,得到一个列表,并循环出每一个字的坐标
x = index.split(',')[0] # 得到x轴的坐标
y = index.split(',')[1] # 得到y轴的坐标
action = ActionChains(driver) #创建动作链对象
action.move_to_element_with_offset(image,int(x),int(y)).click().perform()
# image:验证码的元素框;x:验证码的横轴;y:验证码的纵轴
time.sleep(1)
time.sleep(1) # 加载一秒后在进行点击
driver.find_element(By.CSS_SELECTOR,'body > div.geetest_panel.geetest_wind > div.geetest_panel_box.geetest_panelshowclick > div.geetest_panel_next > div > div > div.geetest_panel > a > div').click()
注:该文章仅提供思路,如有错误欢迎指出。
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
我有一个用户工厂。我希望默认情况下确认用户。但是鉴于unconfirmed特征,我不希望它们被确认。虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。factory:userdoafter(:create)do|user,evaluator|#unwantedimplementationdetailshereunlessFactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)user.confirm!endendtrait:unconfirmeddoenden
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。
什么是ruby的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht
华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o
我想解析一个已经存在的.mid文件,改变它的乐器,例如从“acousticgrandpiano”到“violin”,然后将它保存回去或作为另一个.mid文件。根据我在文档中看到的内容,该乐器通过program_change或patch_change指令进行了更改,但我找不到任何在已经存在的MIDI文件中执行此操作的库.他们似乎都只支持从头开始创建的MIDI文件。 最佳答案 MIDIpackage会为您完成此操作,但具体方法取决于midi文件的原始内容。一个MIDI文件由一个或多个音轨组成,每个音轨是十六个channel中任何一个上的
C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.
本文主要介绍在使用Selenium进行自动化测试或者任务时,对于使用了iframe的页面,如何定位iframe中的元素文章目录场景描述解决方案具体代码场景描述当我们在使用Selenium进行自动化测试的时候,可能会遇到一些界面或者窗体是使用HTML的iframe标签进行承载的。对于iframe中的标签,如果直接查找是无法找到的,会抛出没有找到元素的异常。比如近在咫尺的例子就是,CSDN的登录窗体就是使用的iframe,大家可以尝试通过F12开发者模式查看到的tag_name,class_name,id或者xpath来定位中的页面元素,会抛出NoSuchElementException异常。解决
MIMO技术的优缺点优点通过下面三个增益来总体概括:阵列增益。阵列增益是指由于接收机通过对接收信号的相干合并而活得的平均SNR的提高。在发射机不知道信道信息的情况下,MIMO系统可以获得的阵列增益与接收天线数成正比复用增益。在采用空间复用方案的MIMO系统中,可以获得复用增益,即信道容量成倍增加。信道容量的增加与min(Nt,Nr)成正比分集增益。在采用空间分集方案的MIMO系统中,可以获得分集增益,即可靠性性能的改善。分集增益用独立衰落支路数来描述,即分集指数。在使用了空时编码的MIMO系统中,由于接收天线或发射天线之间的间距较远,可认为它们各自的大尺度衰落是相互独立的,因此分布式MIMO
2022/8/4更新支持加入水印水印必须包含透明图像,并且水印图像大小要等于原图像的大小pythonconvert_image_to_video.py-f30-mwatermark.pngim_dirout.mkv2022/6/21更新让命令行参数更加易用新的命令行使用方法pythonconvert_image_to_video.py-f30im_dirout.mkvFFMPEG命令行转换一组JPG图像到视频时,是将这组图像视为MJPG流。我需要转换一组PNG图像到视频,FFMPEG就不认了。pyav内置了ffmpeg库,不需要系统带有ffmpeg工具因此我使用ffmpeg的python包装p